С zsh
вы можете рекурсивно сопоставлять каталоги с глобусом **
, если включена опция EXTENDED_GLOB
. Вы можете включить опции с помощью встроенного setopt
(например, в вашем ~/.zshrc
):
setopt extendedglob
Глобус **
соответствует нулю или нескольким каталогам. Так что **/*.mp4
будет соответствовать dir1/1.mp4
и dir2/2.mp4
в вашем примере. Предполагая, что ffmpeg допускает полные пути в обоих параметрах, где вы используете $i
, больше ничего не нужно менять:
for i in **/*.mp4; do ffmpeg -i "$i" -vf fps=0.5 "$i-%d.jpg"; done
Начиная с zsh
5.2, вы также можете дополнительно установить GLOB_STAR_SHORT
, что позволяет сократить **/*.mp4
до **.mp4
.
for i in **.mp4; do ffmpeg -i "$i" -vf fps=0.5 "$i-%d.jpg"; done