Android

Commande Xargs sous Linux

3 minutes pour comprendre: la commande tar

3 minutes pour comprendre: la commande tar

Table des matières:

Anonim

L'utilitaire xargs vous permet de créer et d'exécuter des commandes à partir d'une entrée standard. Il est généralement utilisé en combinaison avec d'autres commandes via la tuyauterie.

Avec xargs , vous pouvez fournir une entrée standard comme argument aux utilitaires de ligne de commande comme mkdir et rm .

Dans ce didacticiel, nous aborderons les bases de l'utilisation de la commande xargs .

Comment utiliser la commande Linux xargs

xargs lit les arguments de l'entrée standard, séparés par des espaces vides ou des retours à la ligne, et exécute la commande spécifiée en utilisant l'entrée comme arguments de la commande. Si aucune commande n'est fournie, la valeur par défaut est /bin/echo .

La syntaxe de la commande xargs est la suivante:

xargs]

L'exemple le plus simple de l'utilisation de xargs serait de passer plusieurs chaînes séparées par des espaces en utilisant un canal vers xargs et d'exécuter une commande qui utilisera ces chaînes comme arguments.

echo "file1 file2 file3" | xargs touch

Dans l'exemple ci-dessus, nous redirigeons l'entrée standard vers xargs , et la commande touch est exécutée pour chaque argument, créant trois fichiers. C'est la même chose que si vous exécutez:

touch file1 file2 file3

Comment afficher la commande et inviter l'utilisateur

Pour imprimer la commande sur le terminal avant de l'exécuter, utilisez l'option -t ( --verbose ):

echo "file1 file2 file3" | xargs -t touch

touch file1 file2 file3

echo "file1 file2 file3" | xargs -p touch

Tapez y ou Y pour confirmer et exécuter la commande:

touch file1 file2 file3 ?…y

Cette option est utile lors de l'exécution de commandes destructives.

Comment limiter le nombre d'arguments

Par défaut, le nombre d'arguments transmis à la commande est déterminé par la limite du système.

L'option -n ( --max-args ) spécifie le nombre d'arguments à transmettre à la commande donnée. xargs exécute la commande spécifiée autant de fois que nécessaire jusqu'à ce que tous les arguments soient épuisés.

Dans l'exemple suivant, le nombre d'arguments lus à partir de l'entrée standard est limité à 1.

echo "file1 file2 file3" | xargs -n 1 -t touch

Comme vous pouvez le voir dans la sortie détaillée ci-dessous, la commande tactile est exécutée séparément pour chaque argument:

touch file1 touch file2 touch file3

Comment exécuter plusieurs commandes

Pour exécuter plusieurs commandes avec xargs , utilisez l'option -I . Il fonctionne en définissant une chaîne de replace-str après l'option -I et toutes les occurrences de la replace-str remplacement sont remplacées par l'argument passé à xargs.

L'exemple xargs suivant exécutera deux commandes, il créera d'abord les fichiers à l'aide de touch , puis il listera les fichiers avec la commande ls :

echo "file1 file2 file3" | xargs -t -I % sh -c '{ touch %; ls -l %; }'

-rw-r--r-- 1 linuxize users 0 May 6 11:54 file1 -rw-r--r-- 1 linuxize users 0 May 6 11:54 file2 -rw-r--r-- 1 linuxize users 0 May 6 11:54 file3

Un choix courant pour replace-str est % . Cependant, vous pouvez utiliser un autre espace réservé, par exemple, ARGS :

echo "file1 file2 file3" | xargs -t -I ARGS sh -c '{ touch ARGS; ls -l ARGS; }'

Comment spécifier un délimiteur

Utilisez l'option -d ( --delimiter ) pour définir un délimiteur personnalisé, qui peut être soit un seul caractère, soit une séquence d'échappement commençant par \ .

L'exemple suivant que nous utilisons ; comme délimiteur:

echo "file1;file2;file3" | xargs -d ; -t touch

touch file1 file2 file3

Comment lire des éléments d'un fichier

La commande xargs peut également lire des éléments d'un fichier au lieu d'une entrée standard. Pour ce faire, utilisez l'option -a ( --arg-file ) suivie du nom du fichier.

Dans l'exemple suivant, la commande xargs lit le fichier ips.txt et ips.txt une ips.txt ping à chaque adresse IP.

ips.txt

8.8.8.8 1.1.1.1

Nous utilisons également l'option -L 1 , qui demande à xargs de lire une ligne à la fois. Si cette option est omise, xargs transmettra toutes les adresses IP à une seule commande ping .

xargs -t -L 1 -a ips.txt ping -c 1

ping -c 1 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=68.1 ms… ping -c 1 1.1.1.1 PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data. 64 bytes from 1.1.1.1: icmp_seq=1 ttl=59 time=21.4 ms

Utilisation de xargs avec find

xargs est le plus souvent utilisé en combinaison avec la commande find . Vous pouvez utiliser find pour rechercher des fichiers spécifiques, puis utiliser xargs pour effectuer des opérations sur ces fichiers.

Pour éviter les problèmes avec les noms de fichiers contenant des sauts de ligne ou d'autres caractères spéciaux, utilisez toujours l'option find -print0 , qui provoque la find pour imprimer le nom de fichier complet suivi d'un caractère nul. Cette sortie peut être correctement interprétée par xargs utilisant l'option -0 , ( --null ).

Dans l'exemple suivant, find imprimera les noms complets de tous les fichiers dans le répertoire /var/www/.cache et xargs transmettra les chemins d'accès aux fichiers à la commande rm :

find /var/www/.cache -type f -print0 | xargs -0 rm -f

Utilisation de xargs pour découper les caractères d'espacement

xargs peut également être utilisé comme un outil pour supprimer les espaces blancs des deux côtés d'une chaîne donnée. Dirigez simplement la chaîne vers la commande xargs , et elle effectuera le découpage:

echo " Long line " | xargs

Long line

Cela peut être utile lors de la comparaison de chaînes dans des scripts shell.

#!/bin/bash VAR1=" Linuxize " VAR2="Linuxize" if]; then echo "Strings are equal." else echo "Strings are not equal." fi ## Using xargs to trim VAR1 if]; then echo "Strings are equal." else echo "Strings are not equal." fi

Strings are not equal. Strings are equal.

Conclusion

xargs est un utilitaire de ligne de commande sous Linux qui vous permet de créer et d'exécuter des commandes.

Pour plus d'informations sur chaque option xargs , consultez la page de manuel xargs.

terminal xargs