O motivo pelo qual as pessoas usam xargs
em combinação com o find é que vários nomes de arquivos serão passados para a mesma chamada de programa de qualquer programa xargs
iniciado. Por exemplo, se find
retornar os arquivos foo , bar e baz , o seguinte será executado mv
apenas uma vez:
find sourceDir [...] -print0 | xargs -0 mv -t destDir
Efetivamente, ele chama mv
da seguinte maneira:
mv -t destDir foo bar baz
Se você não precisa ou deseja esse comportamento (como eu assumo é o caso aqui), você pode simplesmente usar find
's -exec
.
Nesse caso, uma solução fácil seria escrever um script de shell curto, como o seguinte:
#!/usr/bin/env bash
[[ -f "$1" ]] || { echo "$1 not found" ; exit 1 ; }
P="$1"
F="$( basename $P )"
ffmpeg -i "$P" -f flv "$F"
Salve como myffmpeg.sh
e execute chmod +x myffmpeg.sh
. Em seguida, execute o seguinte:
find . -iname "*.mov" -exec /path/to/myffmpeg.sh {} \;
Isso chamará o script de shell uma vez para cada arquivo encontrado. O script de shell, por sua vez, extrai o nome do arquivo do caminho completo e chama ffmpeg
com os argumentos apropriados.
xargs
em geral podem querer consultar stackoverflow.com/questions/3770432/… .