Nel terminale, come posso ripetere più volte un comando su file diversi?


13

Nel terminale, voglio usare ffmpeg2theora per convertire tutti i file .MOV in una determinata directory in file .ogv. Tuttavia, quanto segue non funziona:

ffmpeg2theora *.MOV

C'è un buon modo per ripetere un comando più volte su file diversi?

Grazie!

Risposte:


20

Se si utilizza la shell predefinita (bash), è possibile utilizzare quanto segue:

for file in *.MOV; do ffmpeg2theora "$file"; done

5
È più probabile che funzioni senza le barre:for file in *.[Mm][Oo][Vv]; do ffmpeg2theora "$file"; done
frabjous,

si, hai perfettamente ragione, ho corretto la mia risposta.
Marcel Stimberg,

1
È inoltre possibile impostare l' nocaseglobopzione bash in modo che corrisponda alle estensioni di file minuscole, maiuscole e miste.
enzotib,

Grazie! Non ho mai usato bash prima, ma sembra davvero utile. (Tempo per me di imparare!)
Alan C

11

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

Per limitare la profondità di ricorsione, è possibile aggiungere -maxdepth 1prima-exec


2
Giusto per affermare la differenza tra questa risposta e la mia risposta: l'uso di find cercherà anche i file nelle sottodirectory, la for file in *.MOVsoluzione cercherà solo nella directory corrente.
Marcel Stimberg,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.