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


14

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

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


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
Мэтт Бернс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.