У меня есть большое количество файлов, имя которых является "img800400_497708.307247.png", и я хотел бы изменить все точки (периоды) на подчеркивание с помощью консоли. Как я могу сделать это?
Можно сделать это довольно легко с эти 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
Решение для удара, которое удаляет расширение, заменяет периоды подчеркиваниями, затем добавляет назад расширение:
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