Jak w terminalu mogę powtórzyć polecenie wiele razy dla różnych plików?

13

W terminalu chcę użyć ffmpeg2theora do konwersji wszystkich plików .MOV w określonym katalogu na pliki .ogv. Jednak następujące funkcje nie działają:

ffmpeg2theora *.MOV

Czy istnieje dobry sposób wielokrotnego powtarzania polecenia dla różnych plików?

Dzięki!

Alan C.
źródło

Odpowiedzi:

20

Jeśli używasz domyślnej powłoki (bash), możesz użyć następujących opcji:

for file in *.MOV; do ffmpeg2theora "$file"; done
Marcel Stimberg
źródło
5
Jest to bardziej prawdopodobne, że zadziała bez ukośników:for file in *.[Mm][Oo][Vv]; do ffmpeg2theora "$file"; done
frabjous
tak, masz absolutną rację, poprawiłem swoją odpowiedź.
Marcel Stimberg,
1
Możesz także ustawić nocaseglobopcję bash, aby dopasować rozszerzenia plików wielkimi i małymi literami.
enzotib,
Dziękuję Ci! Nigdy wcześniej nie korzystałem z bash, ale wygląda to naprawdę przydatne. (Czas na naukę!)
Alan C
11

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

Aby ograniczyć głębokość rekurencji, możesz dodać -maxdepth 1wcześniej-exec

Michał Šrajer
źródło
2
Wystarczy wskazać różnicę między tą odpowiedzią a moją odpowiedzią: użycie find będzie również szukało plików w podkatalogach, for file in *.MOVrozwiązanie będzie szukać tylko w bieżącym katalogu.
Marcel Stimberg,