Как может я обрабатывать в пакетном режиме переименовать имена файлов в консоли

У меня есть большое количество файлов, имя которых является "img800400_497708.307247.png", и я хотел бы изменить все точки (периоды) на подчеркивание с помощью консоли. Как я могу сделать это?

4
задан 28 April 2015 в 00:40

2 ответа

Можно сделать это довольно легко с эти rename команда. Единственная проблема сохраняет расширение. Мы запускаем путем замены всех точек, но тогда заменяем _png .png. Необходимо будет, очевидно, адаптировать это к другим дополнительным типам.

cd /path/to/images
rename 's/\./_/g; s/_png$/.png/' *.png -vn

Примечание: -vn на конце только продемонстрирует то, что он сделал бы. Это - триггер безопасности. Проверьте, что команда делает то, что Вы хотите и затем удаляете ту последнюю часть.

А суперпростая тестовая обвязка:

$ touch file.{01..10}.png
$ rename 's/\./_/g; s/_png$/.png/' *.png -vn
file.01.png renamed as file_01.png
file.02.png renamed as file_02.png
file.03.png renamed as file_03.png
file.04.png renamed as file_04.png
file.05.png renamed as file_05.png
file.06.png renamed as file_06.png
file.07.png renamed as file_07.png
file.08.png renamed as file_08.png
file.09.png renamed as file_09.png
file.10.png renamed as file_10.png
6
ответ дан 1 December 2019 в 09:23

Решение для удара, которое удаляет расширение, заменяет периоды подчеркиваниями, затем добавляет назад расширение:

for f in *.png; do g="${f%.*}"; echo mv -- "$f" "${g//./_}.png"; done

Удаляют echo, как только Вы убедились, работает ли это. Это могло довольно легко быть расширено на генерала .ext расширение, если у Вас есть больше чем один тип файла, например

for f in *.*; do g="${f%.*}"; e="${f##*.}"; echo mv -- "$f" "${g//./_}.$e"; done
0
ответ дан 1 December 2019 в 09:23

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

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