GNU/Linux >> Tutoriels Linux >  >> Linux

10 exemples de commandes Xargs sous Linux / UNIX

La commande xargs est extrêmement utile lorsque nous la combinons avec d'autres commandes.

Ce didacticiel explique l'utilisation de la commande xargs à l'aide de quelques exemples simples.

Ces exemples vous aideront à comprendre les bases du fonctionnement de la commande xargs. Mais, une fois que vous avez compris ces concepts, vous pouvez proposer vos propres exemples intelligents de xargs pour résoudre divers problèmes de ligne de commande.

Syntaxe de xargs (à partir de la page de manuel) :

xargs [-0prtx] [-E eof-str] [-e[eof-str]] [–eof[=eof-str]] [–null] [-d delimiter] [–delimiter delimiter] [-I replace- str] [-i[replace-str]] [–replace[=replace-str]] [-l[max-lines]] [-L max-lines] [–max-lines[=max-lines]] [ -n max-args] [–max-args=max-args] [-s max-chars] [–max-chars=max-chars] [-P max-procs] [–max-procs=max-procs] [–interactive] [–verbose] [–exit] [–no-run-if-empty] [–arg-file=fichier] [–show-limits] [–version] [–help] [commande [initial-arguments ]]

1. Exemple de base Xargs

La commande xargs (par défaut) attend l'entrée de stdin et exécute la commande /bin/echo sur l'entrée. Voici ce qui se passe lorsque vous exécutez xargs sans aucun argument, ou lorsque vous l'exécutez sans combinaison avec d'autres commandes.

Lorsque vous tapez xargs sans aucun argument, il vous sera demandé d'entrer l'entrée via stdin :

$ xargs
Hi,
Welcome to TGS.

Après avoir tapé quelque chose, appuyez sur ctrl+d, ce qui vous renverra la chaîne sur stdout comme indiqué ci-dessous.

$ xargs
Hi,
Welcome to TGS.Hi, Welcome to TGS.

2. Spécifiez le délimiteur à l'aide de l'option -d

Des délimiteurs peuvent être appliqués afin que chaque caractère de l'entrée soit pris littéralement à l'aide de l'option -d dans xargs.

Dans l'exemple précédent, même si l'entrée contenait un \n (nouvelle ligne) après "Salut", mais la sortie en écho ne contenait pas la nouvelle ligne "\n" . Ainsi, la sortie de l'exemple précédent a été combinée en une seule ligne.

Dans l'exemple suivant, lorsque vous utilisez le -d\n, il conservera le délimiteur de nouvelle ligne dans la sortie et affichera la sortie exactement telle qu'elle a été saisie.

$ xargs -d\n
Hi,
Welcome to TGS.

Après avoir tapé ce qui précède, appuyez sur ctrl + d, ce qui vous renverra la chaîne sur stdout comme indiqué ci-dessous. Mais, cette fois, il conservera la nouvelle ligne.

$ xargs -d\n
Hi,
Welcome to TGS.Hi, 
Welcome to TGS.

3. Limiter la sortie par ligne à l'aide de l'option -n

Par défaut, comme expliqué précédemment, xargs affiche tout ce qui arrive à son stdin comme indiqué ci-dessous.

$ echo a b c d e f| xargs
a b c d e f

Cependant, la sortie de la commande xargs peut être divisée en plusieurs lignes à l'aide de l'option -n.

Dans l'exemple suivant, nous avons utilisé -n 3, qui n'affichera que 3 éléments par ligne dans la sortie xargs.

$ echo a b c d e f| xargs -n 3
a b c
d e f

De la même manière, vous pouvez également diviser la sortie avec 2 éléments par ligne comme indiqué ci-dessous en utilisant -n 2.

$ echo a b c d e f| xargs -n 2
a b
c d
e f

4. Inviter l'utilisateur avant l'exécution à l'aide de l'option -p

En utilisant l'option -p, vous pouvez confirmer l'exécution de la commande xargs de l'utilisateur.

En considérant l'exemple précédent, si nous voulons confirmer chaque exécution de la commande /bin/echo par l'utilisateur, utilisez l'option -p avec l'option -n comme indiqué ci-dessous.

$ echo a b c d e f| xargs -p -n 3
/bin/echo a b c ?...y
/bin/echo d e f ?...a b c
y
d e f

Dans la sortie suivante, j'ai dit "n" à toutes les sorties d'écho. Donc, xargs n'a rien exécuté.

$ echo a b c d e f| xargs -p -n 3
/bin/echo a b c ?...n
/bin/echo d e f ?...n
/bin/echo ?...n

Remarque :Ceci est utile lorsque vous combinez xargs avec des commandes perturbatrices telles que rm. Dans ces cas, vous voudrez peut-être voir ce que fait xargs.

5. Éviter la valeur par défaut /bin/echo pour une entrée vide à l'aide de l'option -r

Lorsqu'il y a une entrée vide (c'est-à-dire qu'aucune entrée n'a été donnée à la commande xargs), il exécutera une commande /bin/echo qui affichera une nouvelle ligne comme indiqué ci-dessous.

$ xargs -p

Appuyez sur ctrl-d après avoir tapé "xargs -p", ce qui indiquera qu'il a exécuté un /bin/echo comme indiqué ci-dessous.

$ xargs -p
                      /bin/echo ?...y

$

6. Imprimer la commande avec la sortie à l'aide de l'option -t

Dans l'exemple suivant, tapez "abcd" comme entrée pour la commande xargs -t.

$ xargs -t
abcd

Appuyez sur ctrl-d pour terminer la commande xargs -t ci-dessus, qui affichera la commande que xargs exécute réellement avant d'afficher la sortie. Dans ce cas, la commande exécutée par xargs est "/bin/echo abcd", qui s'affiche ici.

$ xargs -t
abcd
/bin/echo abcd
abcd

7. Combinez Xargs avec la commande Rechercher

C'est l'une des utilisations les plus importantes de la commande xargs. Lorsque vous avez besoin de trouver certains types de fichiers et d'effectuer certaines actions dessus (la plus populaire étant l'action de suppression).

La commande xargs est très efficace lorsque nous la combinons avec d'autres commandes.

Dans l'exemple suivant, nous avons pris la sortie de la commande find et l'avons transmise en entrée à la commande xargs. Mais, au lieu d'exécuter la commande par défaut /bin/echo, nous demandons à la commande xargs d'exécuter la commande rm -rm sur l'entrée.

Ainsi, dans cet exemple, la sortie de la commande find est tous les fichiers avec l'extension *.c, qui est donnée en entrée à la commande xargs, qui à son tour exécute la commande "rm -rf" sur tous les fichiers *.c .

$ ls
one.c  one.h  two.c  two.h

$ find . -name "*.c" | xargs rm -rf

$ ls
one.h  two.h

8. Supprimer les fichiers qui ont un espace blanc dans le nom de fichier

Nous voyons donc que malgré l'exécution de la commande rm sur les fichiers .c de ce répertoire, le fichier "The Geek Stuff.c" n'a pas été supprimé. C'est parce que ce fichier contient des espaces blancs dans son nom.

Comme le montre l'exemple suivant, il a supprimé tous les fichiers avec l'extension *.c sauf un. c'est-à-dire que le fichier qui a un espace blanc dans le nom de fichier (c'est-à-dire "The Geek Stuff.c") n'a pas été supprimé par la commande rm.

$ touch "The Geek Stuff.c"

$ ls
one.c  one.h  two.c  two.h The Geek Stuff.c

$ find . -name "*.c" | xargs rm -rf

$ ls
one.h  two.h  The Geek Stuff.c

Dans cette situation, utilisez l'option -print0 avec la commande find et l'option -0 avec la commande xargs pour supprimer les fichiers, y compris ceux qui ont de l'espace dans les noms de fichiers, comme indiqué ci-dessous.

$ ls
one.c  one.h  two.c  two.h The Geek Stuff.c

$ find . -name "*.c" -print0 | xargs -0 rm -rf

$ ls
one.h  two.h

9. Afficher les limites du système sur xargs à l'aide de l'option –show-limits

Voir l'exemple ci-dessous :
L'exemple suivant affiche toutes les limites définies par le système d'exploitation qui auront un impact sur le fonctionnement de la commande xargs.

$ xargs --show-limits
Your environment variables take up 1203 bytes
POSIX upper limit on argument length (this system): 2093901
POSIX smallest allowable upper limit on argument length (all systems): 4096
Maximum length of command we could actually use: 2092698
Size of command buffer we are actually using: 131072

Execution of xargs will continue now, and it will try to read its input and 
run commands; if this is not what you wanted to happen, please type the 
end-of-file keystroke.

Warning: /bin/echo will be run at least once.  If you do not want that to happen, 
then press the interrupt keystroke

10. Combinez Xargs avec la commande Grep

La commande xargs peut être combinée avec la commande grep pour filtrer des fichiers particuliers à partir des résultats de recherche de la commande find.

Dans l'exemple suivant, la commande find a fourni tous les fichiers .c en entrée de xargs.

La commande xargs exécute la commande grep pour trouver tous les fichiers (parmi les fichiers fournis par la commande find) qui contenaient une chaîne « stdlib.h ».

$ find . -name '*.c' | xargs grep 'stdlib.h'
./tgsthreads.c:#include
./valgrind.c:#include
./direntry.c:#include
./xvirus.c:#include
./temp.c:#include
...
...
...

Linux
  1. 7 Exemples de commandes Linux df

  2. 5 Exemples de commandes UNIX / Linux Traceroute

  3. Exemples de commande rm sous Linux

  4. Exemples de commandes ps sous Linux

  5. w Exemples de commandes sous Linux

Commande Linux wc avec exemples

10 exemples de commandes iftop sous Linux

Commande Xargs sous Linux

Exemples de commandes Linux xargs

Exemples de commandes id sous Linux

Exemples de commandes xargs sous Linux