Wie kann ich im Terminal einen Befehl mehrmals für verschiedene Dateien wiederholen?

13

Im Terminal möchte ich ffmpeg2theora verwenden, um alle .MOV-Dateien in einem bestimmten Verzeichnis in .ogv-Dateien zu konvertieren. Folgendes funktioniert jedoch nicht:

ffmpeg2theora *.MOV

Gibt es eine gute Möglichkeit, einen Befehl für verschiedene Dateien mehrmals zu wiederholen?

Vielen Dank!

Alan C
quelle

Antworten:

20

Wenn Sie die Standardshell (bash) verwenden, können Sie Folgendes verwenden:

for file in *.MOV; do ffmpeg2theora "$file"; done
Marcel Stimberg
quelle
5
Dies funktioniert eher ohne die Schrägstriche:for file in *.[Mm][Oo][Vv]; do ffmpeg2theora "$file"; done
Frabjous
ja, du hast absolut recht, ich habe meine antwort korrigiert.
Marcel Stimberg
1
Sie können die nocaseglobbash-Option auch so einstellen, dass sie mit Dateierweiterungen in Kleinbuchstaben oder in Großbuchstaben übereinstimmt.
Enzotib
Vielen Dank! Ich habe Bash noch nie benutzt, aber es sieht wirklich nützlich aus. (Zeit für mich zu lernen!)
Alan C
11

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

Um die Rekursionstiefe zu begrenzen, können Sie -maxdepth 1zuvor hinzufügen-exec

Michał Šrajer
quelle
2
Um den Unterschied zwischen dieser Antwort und meiner Antwort zu verdeutlichen: Wenn Sie find verwenden, werden auch Dateien in Unterverzeichnissen gesucht. Die for file in *.MOVLösung sucht nur im aktuellen Verzeichnis.
Marcel Stimberg