Переименовать несколько файлов с одинаковыми цифрами после десятичного числа

У меня есть несколько файлов с именами ворт-0.01.txt, ворт-0.02.txt, ...

vort-0.1.txt ... vort-0.2.txt ... и т.д.

Я хочу переименовать каждый файл с двумя десятичными знаками, т.е. я хочу изменить имя vort-0.1.txt на vort-0.10.txt и оставить vort-0.01.txt как есть.

Как я могу сделать это с помощью сценария bash?

Спасибо за вашу помощь.

1
задан 12 November 2020 в 13:36

1 ответ

Использование Perl-команды rename, затем задано

$ ls vort*.txt
vort-0.001.txt  vort-0.01.txt  vort-0.1.txt  vort-0.2.txt

затем

rename -n 's/(\d+\.\d+)/sprintf "%.2f", $1/e' vort*.txt

всегда будет введена 2-значная точность, как

rename(vort-0.001.txt, vort-0.00.txt)
rename(vort-0.1.txt, vort-0.10.txt)
rename(vort-0.2.txt, vort-0.20.txt)

Если вы хотите переименовать с минимальной точностью, т.е. изменяйте только те имена файлов, которые в настоящее время имеют одноразрядную точность, затем

$ rename -n 's/(\d+\.\d)(?=\D)/sprintf "%.2f", $1/e' vort*.txt
rename(vort-0.1.txt, vort-0.10.txt)
rename(vort-0.2.txt, vort-0.20.txt)

удалите -n, как только вы будете довольны тем, что он работает правильно.


Чтобы сделать то же самое, используя только манипуляции с оболочкой bash,

for f in vort-?.?.txt; do 
  base=${f%.txt}
  printf -v newname 'vort-%.2f.txt' "${base#vort-}"
  echo mv -- "$f" "$newname"
done

здесь удалите эхо после тестирования.

2
ответ дан 12 November 2020 в 13:17

Другие вопросы по тегам:

Похожие вопросы: