You must surround your find ...
command with $( )
to substitute the output, thusly:
for i in $( find . -type f -iname '*.wmv` ) ; do ...
However, you're causing Bash to produce (and store internally) a list of 120,860 filenames before you process the first one. Also (you haven't described the format of the filenames), this technique mishandles filenames with Spaces in them, e.g. A Big File.wmf
.
Read man find
, especially, about --print0
, read man xargs
, especially about -0
, read man bash
and wrap your command in a script that runs uniconverter
on each of its arguments, and use something like:
find . -type f -iname '*.wmv' -print0 | xargs -0 thescript
Be sure to read man bash
and be very aware of any Spaces in your filenames.
@steeldriver: TQ for pointing out my error. Reading man bash
shows:
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.
So I overworried about Shell expansion.