Если вы хотите также петли во вложенных папках, вы можете использовать globstar
оболочки дополнительное поведение, увидеть Pattern Matching section of the reference manual и Shopt Builtin section of the reference manual, как так:
shopt -s globstar
for f in **/*.m4a; do ffmpeg -i "$f" -acodec libmp3lame -ab 320 "${f%.m4a}.mp3"; done
Использование find
это немного сложнее, так как вы с помощью Shell Parameter Expansion. Вот вероятность того, что будет 100% гарантией безопасности в отношении файлов с пробелами или другими забавными символами в названии:
find . -name '*.m4a' -type f -exec bash -c 'ffmpeg -i "$0" -acodec libmp3lame -ab 320 "${0%.m4a}.mp3"' {} \;
Эта вторая возможность может быть быстрее, если у вас есть огромное количество файлов, так как bash подстановка, как известно, довольно медленно для огромного количества файлов.
В -exec
заявлении find
, я использую bash -c '...'
. В этом случае, каждый параметр дается после строки, которая будет выполнен будет установлена в качестве позиционных параметров, индексируется 0
, отсюда $0
, что появляется в коде
ffmpeg -i "$0" -acodec libmp3lame -ab 320 "${0%.m4a}.mp3"
Надежда это помогает!
Посмотрите на [эту тему] (http://stackoverflow.com/a/15930451/828193). Чтобы отфильтровать имена файлов в команде 'find', используйте опцию' -name '* .m4a'' – user000001