La raison pour laquelle les gens utilisent xargs
en combinaison avec find est que plusieurs noms de fichiers seront transmis au même appel de programme quel que soit le xargs
lancement du programme . Par exemple, si find
renvoie les fichiers foo , bar et baz , les éléments suivants ne s'exécuteront mv
qu'une seule fois:
find sourceDir [...] -print0 | xargs -0 mv -t destDir
En effet, il appelle mv
comme 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.sh
et 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 ffmpeg
avec les arguments appropriés.
xargs
en général pourraient vouloir consulter stackoverflow.com/questions/3770432/… .