Linux Commands · 8 min read · Sep 20, 2025

8 Exemples Pratiques de la Commande Xargs de Linux pour Débutants

La commande Linux xargs n’est peut-être pas un outil de ligne de commande très populaire, mais cela ne change pas le fait qu’il est extrêmement utile, surtout en combinaison avec d’autres commandes comme find et grep. Si vous ne connaissez pas encore xargs et que vous souhaitez comprendre son utilisation, vous serez heureux de savoir que nous allons faire cela ici.

Avant de continuer, veuillez garder à l'esprit que tous les exemples présentés dans ce tutoriel ont été testés sur Ubuntu 22.04 LTS. Le shell utilisé sur mon système est Bash.

1. Comment fonctionne la commande Xargs ?

Eh bien, avant de passer à son utilisation, il est important de comprendre ce que fait exactement Xargs. En termes simples, l’outil - dans sa forme la plus basique - lit des données à partir de l’entrée standard (stdin) et exécute la commande (fournie comme argument) une ou plusieurs fois en fonction de l’entrée lue. Tous les blancs et espaces dans l’entrée sont traités comme des délimiteurs, tandis que les lignes vides sont ignorées.

Si aucune commande n’est fournie comme argument à xargs, la commande par défaut que l’outil exécute est echo. Par exemple, dans l’exemple suivant, j’ai simplement exécuté ‘xargs’ et entré ‘Hello World’ sur stdin. Lorsque j’ai appuyé sur Ctrl+D (pour dire à xargs que nous avons terminé avec l’entrée), la commande echo a été automatiquement exécutée, et ‘Hello World’ a été imprimé à nouveau.

2. Comment utiliser xargs avec une autre commande ?

Bien que echo soit la commande par défaut que xargs exécute, vous pouvez spécifier explicitement n’importe quelle autre commande. Par exemple, vous pouvez passer la commande find avec son option ‘-name’ comme argument à xargs, puis passer le nom du fichier (ou le type de fichiers) que vous souhaitez trouver comme entrée via stdin.

Voici la commande complète en question :

xargs find -name

Par exemple, nous avons fourni “.txt” en entrée via stdin, ce qui signifie que nous voulons que la commande find* recherche tous les fichiers .txt dans le répertoire actuel (ainsi que dans ses sous-répertoires).

Voici la commande en action :

3. Comment faire en sorte que xargs exécute la commande plusieurs fois (une fois pour chaque ligne d’entrée/argument)

Dans l’exemple que nous avons discuté dans la section précédente, nous voulions rechercher des fichiers .txt, donc nous avons fourni “*.txt” dans l’entrée. Mais que se passe-t-il si le besoin est également de rechercher d’autres types de fichiers, comme .log et .tmp ?

Essayez de donner ceux-ci comme entrée à xargs après “*.txt” et voyez ce qui se passe. Eh bien, vous devriez obtenir une erreur similaire à la suivante :

C’est parce que xargs passe “.txt” et “.log” comme entrée de nom de fichier à la commande find et ensuite find échoue car elle s’exécute avec deux noms de fichiers en entrée. Vous pouvez penser que la commande find s’exécute de la manière suivante :

find -name "*.txt" "*.log"

Et ce n’est pas la bonne façon.

Ce que nous voulons, c’est que la commande xargs passe d’abord “.txt” à la commande find, afin que find nous donne des résultats liés aux fichiers .txt, puis “.log” soit passé. Cela peut être fait en utilisant l’option de ligne de commande -L que xargs fournit.

L’option de ligne de commande -L nécessite un nombre qu’elle traite comme le nombre maximum de lignes non vides qui doivent être passées comme entrée à la commande en une seule fois. Donc, dans notre cas, cette valeur sera 1, car nous voulons qu’une ligne d’entrée soit passée comme entrée à find à la fois.

Voici donc la commande que nous devrions exécuter :

xargs -L 1 find -name

La capture d’écran suivante montre la commande susmentionnée en action :

xargs input / output

Jusqu’à présent, tout va bien. Mais que se passe-t-il si vous passez l’entrée de la manière suivante :

"*.txt" "*.log"

Eh bien, la commande échouera car ‘-L 1’ s’assurera que la ligne complète est passée à la commande find.

Dans des situations comme celles-ci, vous pouvez utiliser l’option de ligne de commande ‘-n’.

L’option de ligne de commande ‘-n’, comme ‘-L’, nécessite un nombre qui représenterait le nombre d’arguments que vous souhaitez que xargs passe par ligne de commande. Dans le cas que nous venons de discuter, “.txt” et “.log” devraient être des arguments différents, et comme nous voulons qu’ils soient passés individuellement, nous devrons fournir ‘1’ comme valeur à ‘-n’.

xargs -n 1 find -name

Xargs -n switch

Voici donc les manières dont nous pouvons faire exécuter à xargs une commande plusieurs fois.

4. Comment faire en sorte que xargs gère les noms de fichiers avec des espaces

Si vous vous en souvenez, au début, nous avons mentionné que xargs traite les espaces vides (ainsi que les caractères de nouvelle ligne) comme des délimiteurs. Cela peut causer des problèmes dans les cas où les noms de fichiers passés comme entrée à xargs contiennent des espaces.

Par exemple, supposons que le répertoire actuel contient un fichier nommé ‘new music.mp3’, et vous souhaitez que xargs passe ce nom à mplayer afin que ce dernier puisse lire le fichier. Si vous suivez la méthode conventionnelle, vous obtiendrez une erreur :

Xargs handle spaces in file names

C’est parce qu’en raison de l’espace entre ‘new’ et ‘music.mp3’, ceux-ci sont traités comme deux fichiers différents par mplayer. Une façon de résoudre ce problème est d’utiliser un antislash lors de la fourniture de l’entrée :

new\ music.mp3

L’autre façon est de changer le délimiteur, ce que vous pouvez faire en utilisant l’option -d. Par exemple, vous pouvez demander à xargs de ne considérer que la nouvelle ligne comme un délimiteur, ce qui peut être fait de la manière suivante :

xargs -d '\n' mplayer

xargs -d switch

5. Comment faire en sorte que xargs gère les noms de fichiers avec des caractères de nouvelle ligne

Donc, maintenant nous savons comment nous pouvons faire en sorte que xargs gère les noms de fichiers qui contiennent des espaces blancs. Mais qu’en est-il des nouvelles lignes ? Oui, les noms de fichiers peuvent également avoir des caractères de nouvelle ligne. Par exemple, il y a un fichier nommé ‘foo’[newline]’file.txt’. Sur le terminal, le nom est affiché comme ‘foo?file.txt’.

Maintenant, supposons que je veuille que la commande find trouve tous les fichiers dont les noms commencent par le texte ‘foo’, puis utilise xargs pour ouvrir ces fichiers dans gedit. Voici la commande :

find . -name "foo*" | xargs gedit

Malheureusement, la commande échoue à atteindre son objectif car un nouveau fichier nommé ‘foo’ s’ouvre dans Gedit. Cela est probablement dû au fait que le caractère de nouvelle ligne est traité comme un délimiteur par xargs.

Pour résoudre ce problème, utilisez l’option -print0 que find propose et associez-la avec l’option -0 de xargs. Voici comment la page de manuel de find explique cette option :

 -print0  
Vrai ; imprime le nom complet du fichier sur la sortie standard, suivi d'un caractère nul (au lieu du caractère de nouvelle ligne que -print utilise). Cela permet aux noms de fichiers qui contiennent des nouvelles lignes ou d'autres types d'espaces blancs d'être correctement interprétés par les programmes qui traitent la sortie de find. Cette option correspond à l'option -0 de xargs.

Donc, voici la commande que nous devrions utiliser :

find . -name "foo*" -print0 | xargs -0 gedit

6. Comment trouver des fichiers contenant un texte spécifique

La commande xargs est vraiment utile si vous souhaitez rechercher des fichiers contenant un texte/une chaîne spécifique. Par exemple, si vous souhaitez trouver des fichiers .txt contenant le texte ‘abc’, cela peut être fait de la manière suivante :

find -name "*.txt" | xargs grep "abc"

Voici la commande en action :

Comme il est assez évident, dans ce cas, la commande xargs obtient son entrée de la commande find.

7. Comment faire en sorte que xargs accepte l’entrée d’un fichier

Jusqu’à présent, nous avons vu xargs accepter l’entrée de stdin (qui est le comportement par défaut) ainsi que d’une autre commande (discutée dans la dernière section). Cependant, si vous le souhaitez, vous pouvez également faire en sorte que xargs accepte l’entrée d’un fichier.

L’option -a de la commande vous permet de le faire. Cette option attend un nom de fichier - ce serait le fichier à partir duquel xargs lira l’entrée.

Par exemple, supposons qu’il y ait un fichier nommé ‘input.txt’. Il contient l’entrée pour xargs (en gros, les contenus sont deux noms de fichiers : testfile1.txt et testfile2.txt). Voici comment xargs peut être utilisé pour lire l’entrée de ce fichier et la passer à une autre commande, disons ls.

xargs -a input.txt ls -lart

Voici la commande en action :

8. Comment faire en sorte que xargs demande la permission de l’utilisateur avant d’exécuter une commande

Nous avons déjà discuté de la façon dont vous pouvez faire exécuter à xargs une commande plusieurs fois (voir point 3 ci-dessus). Mais que se passe-t-il si vous souhaitez que xargs demande votre permission chaque fois qu’il exécute la commande ? Est-ce possible ? Oui, c’est possible - l’option de ligne de commande -p le rend possible.

Voici un exemple de la façon dont vous pouvez exécuter xargs en mode interactif :

Nous n’avons qu’effleuré la surface ici car il existe de nombreuses autres fonctionnalités que la commande xargs fournit sous forme d’options de ligne de commande. Essayez les concepts/fonctionnalités xargs que nous avons expliqués dans ce tutoriel, et en cas de doute ou de question, consultez sa page de manuel.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.