Dans le terminal, comment répéter plusieurs fois une commande sur différents fichiers?

13

Dans le terminal, je veux utiliser ffmpeg2theora pour convertir tous les fichiers .MOV d'un certain répertoire en fichiers .ogv. Cependant, ce qui suit ne fonctionne pas:

ffmpeg2theora *.MOV

Existe-t-il un bon moyen de répéter une commande plusieurs fois sur différents fichiers?

Merci!

Alan C
la source

Réponses:

20

Si vous utilisez le shell par défaut (bash), vous pouvez utiliser ce qui suit:

for file in *.MOV; do ffmpeg2theora "$file"; done
Marcel Stimberg
la source
5
Cela est plus susceptible de fonctionner sans les barres obliques:for file in *.[Mm][Oo][Vv]; do ffmpeg2theora "$file"; done
frabjous
oui, vous avez absolument raison, j'ai corrigé ma réponse.
Marcel Stimberg
1
Vous pouvez également définir l' nocasegloboption bash pour faire correspondre les extensions de fichiers en minuscules et en majuscules à des casse mixtes.
enzotib
Je vous remercie! Je n'ai jamais utilisé bash auparavant mais ça a l'air vraiment utile. (Il est temps pour moi d'aller apprendre!)
Alan C
11

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

Pour limiter la profondeur de récursivité, vous pouvez ajouter -maxdepth 1avant-exec

Michał Šrajer
la source
2
Juste pour indiquer la différence entre cette réponse et ma réponse: L'utilisation de find recherchera également les fichiers dans les sous-répertoires, la for file in *.MOVsolution ne cherchera que dans le répertoire courant.
Marcel Stimberg