« Exécuter des commandes sur plusieurs fichiers : find -exec vs find xargs » : différence entre les versions

Aller à la navigation Aller à la recherche
Ligne 28 : Ligne 28 :


=find | xargs=
=find | xargs=
==xargs avec -n1==
<pre>
find .[args] -print0 | xargs -0 -n1 [cmd]
</pre>
* <code>-print0</code> spécifie à find qu'il doit retourner les résultats à la sortie standard, séparés par le caractère ASCII nul <code>\000</code>
* <code>-0</code> spécifie à xargs que l'entrée qu'il reçoit est séparé par le caractère ASCII nul <code>\000</code>
* <code>-n1</code> demande à xargs d’exécuter la commande avec un seul argument à la fois (dans le cas présent, avec un seul fichier trouvé par find). Cela est similaire au <code>\;</code> de <code>-exec</code>. La commande est donc exécutée autant de fois qu'il y a de fichier trouvé par find.
** On peut modifier 1 par n'importe quelle valeur
==xargs sans -n==
<pre>
find . [args] -print0 | xargs -0 [cmd]
</pre>
* <code>-print0</code> spécifie à find qu'il doit retourner les résultats à la sortie standard, séparés par le caractère ASCII nul <code>\000</code>
* <code>-0</code> spécifie à xargs que l'entrée qu'il reçoit est séparé par le caractère ASCII nul <code>\000</code>
* Quand on ne spécifie pas <code>-nINT</code>, xargs utilise le défaut <code>-n5000</code>. Cela signifie donc que la commande est exécutée avec 5000 arguments maximums, donc dans le cas présent, avec 5000 fichiers à la fois (puis la commande est exécutée  une seconde fois avec les 5000 fichiers suivants, etc). Cela est similaire avec le <code>+;</code> de <code>-exec</code>, néanmoins sans risque de dépasser ARG_LIMIT, ni une limite arbitraire fixée par la commande que vous exécutez.
4 231

modifications

Menu de navigation