Как я могу выполнить команду для каждого файла в данном каталоге?
Я использую 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