Как я могу выполнить команду для каждого файла в данном каталоге?

Я использую mp4box переместить атомы MOOV на файлы MP4.

Дело в том, что у меня будет 6 файлов в данной папке, и я не хочу запускать inter 500 Команда шесть раз.

Можно ли сделать что-то вроде mp4box -inter 500 * в каталоге, чтобы запустить команду для всех файлов mp4 в этой папке?

1 ответ

Решение

Вы можете использовать -exec вариант find, Вот, '{}' заменяется именем файла каждого файла MP4. Это будет касаться всех видов имен файлов, даже тех, которые содержат пробелы или переводы строк. Вам нужно поставить -maxdepth 1 искать только текущий каталог.

find . -iname "*.mp4" -maxdepth 1 -exec mp4box -inter 500 '{}' \;

Альтернативный, более запутанный способ будет включать в себя вывод результатов из find в петле с read, Здесь каждый файл ограничен NUL характер, и вам нужно сказать read разделить входные данные на этот символ, что достигается -d '', Вам также нужно заключить в кавычки переменную "$file", поэтому пробелы или символы-заглушки в имени сохраняются.

find . -iname "*.mp4" -maxdepth 1 -print0 | while IFS= read -d '' -r file; do mp4box -inter 500 "$file"; done
Другие вопросы по тегам