La raison pour laquelle les gens utilisent xargsen combinaison avec find est que plusieurs noms de fichiers seront transmis au même appel de programme quel que soit le xargslancement du programme . Par exemple, si findrenvoie les fichiers foo , bar et baz , les éléments suivants ne s'exécuteront mvqu'une seule fois:
find sourceDir [...] -print0 | xargs -0 mv -t destDir
En effet, il appelle mvcomme suit:
mv -t destDir foo bar baz
Si vous n'avez pas besoin ou ne voulez pas ce comportement (comme je suppose que c'est le cas ici), vous pouvez simplement utiliser find's' -exec.
Dans ce cas, une solution simple serait d'écrire un court script shell, comme suit:
#!/usr/bin/env bash
[[ -f "$1" ]] || { echo "$1 not found" ; exit 1 ; }
P="$1"
F="$( basename $P )"
ffmpeg -i "$P" -f flv "$F"
Enregistrez sous myffmpeg.shet exécutez chmod +x myffmpeg.sh. Ensuite, exécutez ce qui suit:
find . -iname "*.mov" -exec /path/to/myffmpeg.sh {} \;
Cela invoquera le script shell une fois pour chaque fichier trouvé. Le script shell extrait à son tour le nom de fichier du chemin complet et appelle ffmpegavec les arguments appropriés.
xargsen général pourraient vouloir consulter stackoverflow.com/questions/3770432/… .