Изменение неустановленных расширений файлов

Я случайно переименовал большое количество моих файлов с расширением .mp4 . К счастью, исходное расширение было сохранено в имени файла (например, simon.says.nfo.mp4 )

Как я теперь удалю часть mp4 только из этих файлов?

Из-за системы именования, которую я имею, я не могу просто найти find для *.*.mp4 что было бы намного проще с помощью компиляции find / replace.

«rename» – это утилита, которая делает именно то, что вам нужно:

 rename 's/.mp4//' *.mp4 

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

Чтобы удалить расширение .mp4 всех файлов с расширением .nfo.mp4 в текущем каталоге:

 for fname in ./*.nfo.mp4; do newfname="$( basename "$fname" .mp4 )" mv -i "$fname" "$newfname" done 

Утилита basename удаляет путь (оставляет только имя файла) и может удалить суффикс за один раз. Мы можем удалить этот путь без добавления его снова, так как нас интересует только текущий каталог. Эквивалентный эффект был бы newfname="${fname%.mp4}" с помощью расширения параметра newfname="${fname%.mp4}" (который удаляет суффикс .mp4 но не выделяет исходный путь из $fname , хотя здесь это не проблема ).

Я использую mv -i чтобы вы могли вручную подтвердить любую операцию mv , которая в противном случае переписывала бы существующий файл.

Для тестирования следующее будет распечатывать только то, что произошло:

 for fname in ./*.nfo.mp4; do newfname="$( basename "$fname" .mp4 )" printf 'Want to rename "%s" into "%s"\n' "$fname" "$newfname" ## mv -i "$fname" "$newfname" done