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!

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

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


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.