В терминале, как я могу повторить команду несколько раз для разных файлов?

13

В терминале я хочу использовать ffmpeg2theora для преобразования всех файлов .MOV в определенном каталоге в файлы .ogv. Однако следующее не работает:

ffmpeg2theora *.MOV

Есть ли хороший способ повторить команду несколько раз на разных файлах?

Благодарность!

Алан С
источник

Ответы:

20

Если вы используете оболочку по умолчанию (bash), вы можете использовать следующее:

for file in *.MOV; do ffmpeg2theora "$file"; done
Марсель Стимберг
источник
5
Скорее всего, это будет работать без for file in *.[Mm][Oo][Vv]; do ffmpeg2theora "$file"; done
слешей
да, вы абсолютно правы, я исправил свой ответ.
Марсель Стимберг
1
Вы также можете установить nocaseglobопцию bash для соответствия расширениям в нижнем, верхнем и смешанном регистре.
энзотиб
Спасибо! Я никогда раньше не использовал bash, но это выглядит действительно полезным. (Пора мне учиться!)
Alan C
11

find . -iname '*.mov' -exec ffmpeg2theora '{}' \;

Чтобы ограничить глубину рекурсии, вы можете добавить -maxdepth 1до-exec

Михал Шрайер
источник
2
Просто чтобы заявить о разнице между этим ответом и моим ответом: использование find также будет искать файлы в подкаталогах, for file in *.MOVрешение будет искать только в текущем каталоге.
Марсель Стимберг