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

Aller à la navigation Aller à la recherche
 
(5 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
[[Category:Linux]]
[[Category:serveur]]
[[Category:serveur]]
[[Category:desktop]]
[[Category:desktop]]
Ligne 51 : Ligne 52 :
* <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>-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.
* 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.
==caractère ASCII nul \000==
Le caractère ASCII nul <code>\000</code> est une bonne manière de gérer les fichiers contenants des espaces
=performances=
Globalement, <code>xargs -n1</code> est légèrement plus rapide que <code>\;</code>, et <code>xargs -n5000</code> a une vitesse similaire à <code>\+</code>
Notez que <code>xargs</code> peut se paralléliser avec <code>-PINT</code> (généralement -P4 ou -P8 selon le nombre de cœur de votre processeur), ce qui en augmentera les performances que ce soit avec -n1 ou sans.<br>
Rappelez vous que l'intérêt de paralléliser une commande traitant des fichiers n'augmentera les performances que si vous devez appliquer une commande à un nombre important de petits fichiers. Si vous traitez de gros fichiers, la vitesse de votre disque deviendra le facteur limitant et vous perdrez très vite les bénéfices de la parallélisation.
=Différence à noter=
* <code>find -exec</code> retourne l'exit-code de find et pas celui de la sous-commande.
* <code>find | xargs</code> retourne l'exit-code de la sous-commande.
4 231

modifications

Menu de navigation