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