Xargs

De bricosoft
Aller à la navigation Aller à la recherche
Fichier:Spockwin.gif
Ce qu'il risque de se passer si vous utilisez xargs
Erreur dans le widget Twitter Search: unable to write file /home/gbp4dt5/zones/bricosoft.com/www/extensions/Widgets/compiled_templates/wrt693ddf47058572_76633733

xargs est une commande unix pour construire, manipuler des lignes de commandes depuis stdin.

un, uno dous, douei, douas très quatre cinq siès sèt vuech nòu Par exemple :

$ echo 'un
> dous
> très
> ...
> vuech' | xargs yes

Renverra la meme sortie que :

$ yes un dous très quatre cinq siès sèt vuech
un dous très quatre cinq siès sèt vuech
un dous très quatre cinq siès sèt vuech
...
un dous très quatre cinq siès sèt vuech

Si on ne veut que les deux premiers arguments :

$ echo 'un
> dous
> très
> ...
> vuech' | xargs -L 2 yes

un dous
un dous
...


Total du nombre de lignes de logs apache + ventilation par virtual host triée

root@b:/var/log/apache2# ls *.log |xargs wc -l | sort -nr | head
 23219 total
 12954 www.bricosoft.com-access.log
  2319 www.plop.zz-access.log
  2128 www.gni.zu-access.log
  1530 wikileaks.plop.zz-access.log
  1105 www.bricosoft.com-error.log
   391 other_vhosts_access.log
   300 error.log

Utiliser une variable

Le résultat de la recherche(find) est passé comme 1er paramètre de mv qui déplace tout dans ~/mes_images/ :

$ find . -name '*.jpg' -print0 | xargs -I % mv % ~/mes_images/

% remplace le résultat de la recherche. Vous pouvez utiliser un autre nom de variable que %, comme ici (PHOTOS_DE_LA_BELLE_DOCHE) :

$ find . -name '*.jpg' -print0 | xargs -I LES_JPGS mv LES_JPGS ~/mes_images/

travailler par paire d'arguments

Certaines commandes comme diff travaillent sur deux paramètre, l'option -n 2 de xargs permet de construire la bonne CLI depuis l'entrée.

$ echo {1..8} | xargs -n 2
1 2
3 4
5 6
7 8

Executer en parallèle

Fichier:Passante-ecouteurs.gif

En séquentiel, chaque CLI est lancé un par un, ça dure 6 s. :

$ time echo {2,2,2} | xargs -n 1 sleep
real	0m6.006s

En parallèle, ça dure 2 s. :

$ time echo {2,2,2} | xargs -n 1 -P 3 sleep
real	0m2.006s

{{#switch:|subgroup|child=|none=|#default=

}}

Liens

Erreur dans le widget DISQUS: Unable to load template 'wiki:DISQUS'