У меня есть несколько файлов с именами ворт-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?
Спасибо за вашу помощь.
Использование 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
здесь удалите эхо
после тестирования.