Menu Fermer

Comment utiliser la commande xargs (avec des exemples)

Certaines commandes Linux prennent les entrées à la fois depuis l’entrée standard (stdin) et en tant qu’argument de ligne de commande. Cependant, d’autres sont conçues pour ne prendre en compte que l’entrée en tant qu’argument. Pour pouvoir traiter l’entrée standard, ces commandes Linux doivent utiliser la commande xargs.

La commande xargs permet cela et donc d’enchaîner des commandes Linux, par exemple, combiner find avec rm ou mv.

Dans ce tutoriel, je vous montre comment utiliser la commande xargs avec de nombreux exemples.

Comment utiliser la commande xargs (avec des exemples)

A quoi sert la commande xargs

Tous les utilitaires Linux standard ont trois flux de données qui leur sont associés. Il s’agit du flux d’entrée standard (stdin), du flux de sortie standard (stdout) et du flux d’erreur standard (stderr).

Ces flux fonctionnent avec du texte. Nous envoyons des entrées (stdin) à une commande en utilisant du texte, et la réponse (stdout) est écrite dans la fenêtre du terminal sous forme de texte. Les messages d’erreur sont également écrits dans la fenêtre du terminal sous forme de texte (stderr).

Bien que toutes les commandes Linux disposent des trois flux standard, elles n’acceptent pas toutes le stdout d’une autre commande comme entrée dans leur stdin. Cela signifie que vous ne pouvez pas leur envoyer de données par pipe.

La commande xargs prend l’entrée standard et la convertit en argument de commande pour une autre commande. Cette fonctionnalité est particulièrement utile dans la gestion des fichiers, où xargs est utilisée en combinaison avec rm, cp, mkdir et d’autres commandes similaires.

Pour bien comprendre, utilisations l’option -1 de la commande ls qui permet d’afficher une liste de fichiers en colonne :

ls -1 *.txt

Si on pipe la commande avec xargs, on obtient alors un flux de texte :

ls -1 *.txt|xargs

Comment utiliser la commande xargs avec des exemples

Utiliser xargs avec wc

Voici un exemple d’utilisation basique de xargs avec la commande wc.
Cette dernière  permet de compter le nombre de lignes, de mots, de caractères et d’octets de chaque fichier donné ou d’entrée standard et d’imprimer le résultat.

ls *.txt | xargs wc

Cela permet d’utiliser wc pour compter facilement les mots, les caractères et les lignes dans plusieurs fichiers.

Voici les explications :

  • ls liste les fichiers *.txt et passe la liste à xargs
  • xargs transmet les noms de fichiers à wc
  • wc traite les noms de fichiers comme s’il les avait reçus en tant que paramètres de ligne de commande
Comment utiliser la commande xargs avec des exemples

Combiner xargs avec find

La commande find précède souvent xargs dans un pipeline. Utilisez-la pour fournir une liste de fichiers pour un traitement ultérieur par xargs. La syntaxe ressemble à ceci :

find <emplacement> -name "<terme à chercher>" -type f | xargs <commande>

L’exemple ci-dessus montre l’utilisation de la commande find pour trouver tous les fichiers portant l’extension .sh. La liste des fichiers est ensuite envoyée à xargs, qui utilise la commande rm pour les supprimer.

Cependant, xargs n’inclut pas automatiquement les fichiers qui contiennent des espaces vides dans leurs noms. Pour inclure ces fichiers également, utilisez l’option -print0 pour find, et l’option -0 pour xargs :

find [location] -name "<terme à chercher>" -type f -print0 | xargs -0 <commande>

Par exemple en combinant find et la commande rm afin de supprimer les fichiers avec l’extension txt :

find . -name "*txt" -type f -print0| xargs -0 rm -f

Combiner xargs avec grep

Utilisez xargs avec la commande grep pour rechercher une chaîne dans la liste de fichiers fournie par la commande find.

find . -name '<terme à chercher>' | xargs grep '<mot à trouver dans les fichiers>'

L’utilisation de la commande grep avec xargs pour rechercher des textes dans les fichiers
L’exemple ci-dessous a recherché tous les fichiers avec l’extension .txt et les a transmis à xargs, qui a ensuite exécuté la commande grep sur ces fichiers.

find . -name '<terme à chercher>' | xargs grep '<mot à trouver dans les fichiers>'
Comment utiliser la commande xargs avec des exemples

Utiliser xargs avec de multiples commandes

Pour exécuter plus d’une commande avec xargs, utilisez l’option -I. La syntaxe est la suivante :

[commande entrée] | xargs -I % sh -c '[commande1] %; [commande2] %'

Par exemple, la commande suivante permet de créer une série de répertoire à partir d’un fichier texte.
La commande cat liste le contenu du fichier texte et la transmet à xargs que l’on peut utiliser dans une variable %.

cat repertoire.txt |xargs -I % sh -c 'echo %; mkdir %'
Comment utiliser la commande xargs avec des exemples

Lire le contenu d’un fichier

Comme mentionné précédemment, xargs lit l’entrée standard. Utilisez l’option -a pour lire le contenu d’un fichier à la place.

xargs -a <fichier>

Créer un fichier archive tar avec xargs

Comme mentionné précédemment, xargs lit l’entrée standard. Utilisez l’option -a pour lire le contenu d’un fichier à la place.

find <emplacement> -name "<terme à chercher>" -type f -print0 | xargs -0 tar -cvzf <nom fichier archive tar-gz>

Imprimer la commande dans la console

Pour voir les commandes exécutées par xargs dans la sortie standard, utilisez l’option -t.

[commande entrée] | xargs -t [commande]

Par exemple pour créer des répertoires en fournissant la liste via la commande echo :

echo 'repertoire1 repertoire2 repertoire3'|xargs -t mkdir
Comment utiliser la commande xargs avec des exemples
[commande entrée] | xargs -p [commande]

Approuver l’exécution de la commande xargs

Certaines opérations de xargs, comme la suppression de fichiers et de dossiers, sont irréversibles. Pour contrôler l’exécution de ces commandes, utilisez l’option -p.

[commande entrée] | xargs -p [commande]

Par exemple, la commande rm sans l’option -f demande une confirmation :

echo "fichier.txt"|xargs -p rm
Comment utiliser la commande xargs avec des exemples

L’utilisation de l’option -p avec xargs pour approuver l’exécution des commandes
Lorsque vous exécutez une commande avec l’option -p, xargs affiche une ligne de confirmation avant de l’exécuter. Tapez y pour continuer, ou n pour annuler l’opération.

Limiter la sortie par ligne

Il est parfois nécessaire de contrôler le nombre d’arguments que xargs prend en même temps. Effectuez cette action en utilisant l’option -n suivie du nombre d’arguments auxquels vous limitez xargs :

[commande entrée] | xargs -n <nombre> [commande]

Dans l’exemple ci-dessous, xargs prend la chaîne de la commande echo et la divise en trois. Ensuite, il exécute un autre echo pour chacune des parties :

echo "1 2 3 4 5 6 7 8 9"|xargs -n 4
Comment utiliser la commande xargs avec des exemples

Spécifier le délimiteur

Le délimiteur par défaut de xargs est un espace vide. Pour modifier le délimiteur par défaut, utilisez l’option -d suivie d’un caractère unique ou d’un caractère d’échappement tel que n (une nouvelle ligne).

[commande entrée] | xargs -d <nouveau délimiteur>|xargs [commande]

Dans l’exemple ci-dessous, la commande xargs demande au système d’utiliser * comme délimiteur et d’appliquer mkdir à chacun des arguments obtenus.

echo "repertoire1*repertoire2*repertoire3"|xargs -d*|xargs mkdir
Comment utiliser la commande xargs avec des exemples

Supprimer tous les fichiers sauf un type

De même vous pouvez supprimer tous les fichiers sauf un type particulier avec l’option -not de la commande find.

find . -type f -not -name "*.txt" -print0 | xargs -0 -I {} rm -v {}
  • -type f : cherche tous les fichiers
  • mais avec l’extension *.txt
  • Puis on envoie le tout à xargs qui va supprimer les fichiers tout en affichant la liste grâce à l’option-0

Lister tous les comptes d’utilisateurs Linux sur le système

Utilisez xargs pour organiser la sortie des commandes, comme cut. Considérez l’exemple suivant :

cut -d : -f1 < /etc/passwd | sort | xargs

La commande cut accède au fichier /etc/passwd et utilise le délimiteur : pour couper le début de chaque ligne du fichier. La sortie est ensuite acheminée vers sort, qui trie les chaînes reçues, et enfin vers xargs qui les affiche :

Comment utiliser la commande xargs avec des exemples