Você deve cercar seu comando find ...
com $( )
para substituir a saída, assim:
for i in $( find . -type f -iname '*.wmv' ) ; do ...
No entanto, você está fazendo com que o Bash produza (e armazene internamente) uma lista de 120.860 nomes de arquivos antes de processar o primeiro. Além disso (você não descreveu o formato dos nomes dos arquivos), esta técnica manipula incorretamente nomes de arquivos com espaços neles, por exemplo. %código%.
Leia A Big File.wmf
, especialmente, sobre man find
, leia --print0
, especialmente sobre man xargs
, leia -0
e envolva seu comando em um script que execute man bash
em cada um de seus argumentos e use algo como:
find . -type f -iname '*.wmv' -print0 | xargs -0 thescript
Certifique-se de ler uniconverter
e esteja ciente de todos os Espaços nos seus nomes de arquivo.
@steeldriver: TQ para apontar meu erro. Lendo man bash
mostra:
Enclosing characters in double quotes preserves the literal value of
all characters within the quotes, with the exception of $, ', \, and,
when history expansion is enabled, !. The characters $ and ' retain
their special meaning within double quotes. The backslash retains its
special meaning only when followed by one of the following characters:
$, ', ", \, or <newline>. A double quote may be quoted within double
quotes by preceding it with a backslash.
Portanto, fiquei preocupado com a expansão do Shell.