1. xargs
La commande xargs sous UNIX est un utilitaire de ligne de commande permettant de créer un pipeline d'exécution à partir d'une entrée standard.
Bien que des outils tels que grep puissent accepter l’entrée standard en tant que paramètre, de nombreux autres outils ne le peuvent pas.
L'utilisation de xargs permet à des outils tels que echo, rm et mkdir d'accepter les entrées standard en tant qu'arguments.
2. Utilisation de base
Exemple : création de 3 répertoires avec xargs
Code : Tout sélectionner
echo 'one two three' | xargs mkdir
ls
one two three
Code : Tout sélectionner
mdkir one two three
3. Associer xargs et find : des exemples concrets
3.1 En gros
On lance find (sur le répertoire courant (.) ou dans un répertoire spécifique (/Nom/Du/Dir) avec une option de recherche (-name ,basée sur le nom ; -time, basé sur la date, etc...) et tout ce qu'il trouve, on lui applique ce qui est lancé après le pipeline c'est à dire après xargs.
Tout simple donc.
A savoir si on joue avec des fichiers ou des répertoires avec des espaces, on passera l'option -print0 à find et -0 à xargs.
Bon maintenant que vous savez, je pense qu'il vaut mieux mettre quelques exemples concrets
3.2 Exemples concrets
Trouver les fichiers temporaires vieux de plus de 14 jours et les supprimer
Code : Tout sélectionner
find /tmp -mtime +14 | xargs rm
Code : Tout sélectionner
find date/ -print0 | xargs -0 -I '{}' touch -r '{}' -d '+2 day' '{}'
Code : Tout sélectionner
find . -name "foo*" -print0 | xargs -0 gedit
Code : Tout sélectionner
find -name "*.txt" | xargs grep "abc"
Code : Tout sélectionner
find Images/Dossier/ -name "*.png" -type f -print0 | xargs -0 tar -cvzf Arcgive.tar.gz
Code : Tout sélectionner
ls *.txt | xargs wc
Code : Tout sélectionner
find . -name "*.c" | xargs rm -rf
Code : Tout sélectionner
find . -name "*.c" -print0 | xargs -0 rm -rf
Code : Tout sélectionner
find /home/MonUser/MonDossier/ -name "*.c" -print0 | xargs -0 rm -rf
Code : Tout sélectionner
cut -d: -f1 < /etc/passwd | sort | xargs echo
4. L'option -I de xargs
Il est possible d'exécuter plusieurs commandes avec xargs en utilisant l'indicateur -I.
Ceci remplace les occurrences de l'argument par l'argument transmis à xargs.
Les impressions suivantes font écho à une chaîne et créent un dossier.
Code : Tout sélectionner
cat test.txt
tata
toto
tutu
Code : Tout sélectionner
cat test.txt | xargs -I % sh -c 'echo %; mkdir %'
tata
toto
tutu
Code : Tout sélectionner
ls
tata toto tutu
5. L'option -t de xargs
Cette options (-t) permet l'affichage des commandes qui sont effectuées.
Code : Tout sélectionner
echo 'one two three' | xargs -t rm
rm one two three
6. exec VS xargs
On retrouve les mêmes fonctionnalités "find -exec" que "find | xargs" avec des subtilités bien sûr.
Mais les tests effectués sur de grosses quantités de fichiers montrent que l'association "find | xargs" est beaucoup plus rapide.
Exemple sur plus de 1 500 images
Code : Tout sélectionner
time find . -name "*.jpg" -exec ls {} ;
real 0m6.618s
user 0m1.465s
sys 0m4.396s
Code : Tout sélectionner
time find . -name "*.jpg" -print0 | xargs -0 ls
real 0m1.120s
user 0m0.594s
sys 0m0.527s
7. Conclusions
Bon voilà une commande très puissante
Plus de détail
Code : Tout sélectionner
man xargs
man find
man exec