No terminal, como posso repetir um comando várias vezes em arquivos diferentes?

13

No terminal, desejo usar o ffmpeg2theora para converter todos os arquivos .MOV em um determinado diretório em arquivos .ogv. No entanto, o seguinte não funciona:

ffmpeg2theora *.MOV

Existe uma boa maneira de repetir um comando várias vezes em arquivos diferentes?

Obrigado!

Alan C
fonte

Respostas:

20

Se você usar o shell padrão (bash), poderá usar o seguinte:

for file in *.MOV; do ffmpeg2theora "$file"; done
Marcel Stimberg
fonte
5
Esta é mais provável de trabalho sem as barras:for file in *.[Mm][Oo][Vv]; do ffmpeg2theora "$file"; done
frabjous
sim, você está absolutamente certo, eu corrigi minha resposta.
Marcel Stimberg
1
Você também pode definir a nocaseglobopção bash para corresponder a extensões de arquivo em letras minúsculas e maiúsculas.
enzotib 7/08/11
Obrigado! Eu nunca usei o bash antes, mas parece realmente útil. (Tempo para mim para ir aprender!)
Alan C
11

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

Para limitar a profundidade da recursão, você pode adicionar -maxdepth 1antes-exec

Michał Šrajer
fonte
2
Apenas para indicar a diferença entre esta resposta e a minha resposta: O uso de find também procurará arquivos em subdiretórios, a for file in *.MOVsolução procurará apenas no diretório atual.
Marcel Stimberg