En la terminal, ¿cómo puedo repetir un comando varias veces en diferentes archivos?

13

En el terminal, quiero usar ffmpeg2theora para convertir todos los archivos .MOV en un determinado directorio a archivos .ogv. Sin embargo, lo siguiente no funciona:

ffmpeg2theora *.MOV

¿Hay una buena manera de repetir un comando varias veces en diferentes archivos?

¡Gracias!

Alan C
fuente

Respuestas:

20

Si usa el shell predeterminado (bash), puede usar lo siguiente:

for file in *.MOV; do ffmpeg2theora "$file"; done
Marcel Stimberg
fuente
55
Es más probable que esto funcione sin las barras:for file in *.[Mm][Oo][Vv]; do ffmpeg2theora "$file"; done
frabjous
Sí, tienes toda la razón, corrigí mi respuesta.
Marcel Stimberg
1
También puede configurar la nocaseglobopción bash para que coincida con las minúsculas, mayúsculas y las extensiones de archivo de mayúsculas y minúsculas.
enzotib
¡Gracias! Nunca he usado bash antes, pero parece realmente útil. (¡Es hora de que yo vaya a aprender!)
Alan C
11

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

Para limitar la profundidad de recursión, puede agregar -maxdepth 1antes-exec

Michał Šrajer
fuente
2
Solo para establecer la diferencia entre esta respuesta y mi respuesta: el uso de find también buscará archivos en subdirectorios, la for file in *.MOVsolución solo buscará en el directorio actual.
Marcel Stimberg