Есть ли способ быстро изменить все расширения файлов всех файлов в папке?

14

У меня есть большая папка аудиокниг .m4b, которые в их текущем формате не воспроизводятся на моем телефоне Android. Однако они отлично работают, если они переименованы в .m4a

Есть ли быстрый метод или команда терминала, которая может переименовать каждый файл .m4b в папке в .m4a? Нет необходимости в каком-либо преобразовании файлов, просто переименование расширения файла работает отлично.

coversnail
источник
2
К вашему сведению: renameэто скрипт на Perl, который принимает регулярные выражения. Системы Debian также имеют rename.ulкоманду как часть util-linux-ng package. Если Perl не установлен (хорошо, очень маловероятно;)) renameтакже нет.
Rinzwind

Ответы:

16

Это сделает работу за вас.

rename 's/.m4b$/.m4a/' *.m4b

Для пробного запуска вы можете использовать эту команду:

rename 's/.m4b$/.m4a/' *.m4b -vn

-v означает «подробный», и он будет выводить имена файлов при переименовании.

-n выполнит тестовый запуск, при котором не будет переименовывать файлы, но покажет вам список файлов, которые будут переименованы.

Башарат Сиалви
источник
Гораздо лучший ответ, чем мой. Я ленился и пытался не использовать регулярные выражения ...
adempewolff
Спасибо, работает угощение. Спасибо @adempewolff за эти усилия
обложка
10

Очень быстрый способ переименовать файлы, если это все, что вам нужно сделать, и не нужно преобразовывать их в другой формат, - это использовать расширения параметров Bash, которые очень подробно описаны в вики Bash .

Есть несколько разных способов изменить расширение, но я использую здесь простой ${var/original/replacement} парадигму:

for file in *.m4b; do mv -- "${file}" "${file/%m4b/m4a}"; done

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

Само собой разумеется, что этот oneliner может быть изменен и для других файлов, и вы также можете использовать расширения параметров для удаления расширений файлов.


источник
+1 Этот способ работает так же, как и ответ @Basharat Sial, за исключением того, что он также будет работать, когда у вас есть много подходящих файлов *.m4b. В противном случае вы получите ошибку argument list too long.
Мэтт горит
Кроме того, чтобы это произошло, добавьте подробный флаг:for file in *.m4b; do mv -v -- "${file}" "${file/%m4b/m4a}"; done
Мэтт Бернс