accueil > Environnement & utilitaires > xargs

xargs : construire et exécuter des lignes de commande à partir de l'entrée standard

La commande xargs lit des éléments à partir de l'entrée standard (stdin) pour construire et exécuter des listes d'arguments pour d'autres commandes. Elle est très utile pour automatiser des tâches complexes, telles que la conversion de plusieurs lignes d'entrée transmises via un pipe (|) en arguments pour une seule commande, ou la limitation du nombre d'arguments pouvant être traités à la fois.

Aperçu

xargs lit les données de l'entrée standard, les interprète comme des arguments séparés par des espaces ou des sauts de ligne, puis les transmet en tant qu'arguments à la commande spécifiée pour exécution. Elle est particulièrement puissante lorsqu'elle est utilisée avec la commande find pour effectuer des opérations par lots sur des listes de fichiers.

Fonctionnalités principales

  • Conversion des données d'entrée standard en arguments de commande
  • Limitation du nombre d'arguments lors de l'exécution de commandes
  • Support du traitement parallèle
  • Gestion sécurisée des noms de fichiers contenant des caractères spéciaux

Options principales

Les options principales de la commande xargs sont utilisées pour configurer la manière dont les entrées sont traitées, contrôler l'exécution des commandes et définir le format de sortie.

Traitement des entrées

Contrôle de l'exécution

Commande générée :

Essayez de combiner les commandes.

Description:

`xargs` Exécute la commande.

Essayez d'exécuter virtuellement les commandes avec l'IA en combinant les options ci-dessus.

Exemples d'utilisation

xargs peut être utilisé de manière flexible dans divers scénarios. Voici quelques exemples d'utilisation courants.

Utilisation de base : suppression de plusieurs fichiers

echo "file1.txt file2.txt" | xargs rm

Transmet les noms de fichiers reçus de l'entrée standard en tant qu'arguments à la commande rm pour les supprimer.

Suppression sécurisée de fichiers avec find

find . -name "*.bak" -print0 | xargs -0 rm

Supprime les fichiers en toute sécurité, même s'ils contiennent des espaces ou des caractères spéciaux dans leurs noms, en utilisant la combinaison find -print0 et xargs -0.

Exécuter une commande pour chaque fichier (chaîne de remplacement)

find . -name "*.log" | xargs -I {} mv {} {}.old

Exécute la commande mv pour chaque fichier .log trouvé par find afin de changer son extension en .old.

Connexion SSH à plusieurs hôtes en parallèle

cat hostnames.txt | xargs -P 5 -I {} ssh {} "uptime"

Tente de se connecter simultanément à 5 hôtes listés dans le fichier hostnames.txt via SSH pour vérifier leur temps de fonctionnement (uptime).

Invite de confirmation avant exécution

ls *.tmp | xargs -p rm

Demande une confirmation pour chaque fichier .tmp à supprimer dans le répertoire courant.

Conseils et précautions

Conseils et points à surveiller pour utiliser xargs efficacement.

Gestion sécurisée des noms de fichiers

Étant donné que les noms de fichiers peuvent contenir des espaces, des tabulations, des sauts de ligne, des guillemets et d'autres caractères spéciaux, utilisez toujours la combinaison `find ... -print0 | xargs -0 ...` lorsque vous travaillez avec la commande find. Cela évite ces problèmes en séparant les éléments par des caractères nuls.

  • Utilisez toujours `find -print0` avec `xargs -0`
  • Par défaut, la séparation se fait par espaces, ce qui peut causer des problèmes si les noms de fichiers contiennent des espaces.

Prudence lors de l'exécution de commandes dangereuses

Soyez très prudent lorsque vous utilisez xargs avec des commandes qui modifient le système, telles que rm, mv, chown. Il est conseillé d'utiliser l'option `-p` pour confirmer chaque exécution ou l'option `-t` pour vérifier les commandes à exécuter à l'avance.

  • Confirmez avant l'exécution avec l'option `-p` (prompt)
  • Vérifiez les commandes à exécuter avec l'option `-t` (trace)
  • Testez d'abord avec `echo` pour vérifier que le comportement est celui attendu.

xargs vs boucle for

Pour des tâches simples, une boucle for du shell peut être plus intuitive. Cependant, lorsque vous traitez un grand nombre de fichiers/éléments, lorsque le traitement parallèle est nécessaire, ou lorsque vous dépassez la limite de longueur de ligne de commande, xargs est une alternative plus efficace et plus puissante.

  • Traitement de gros volumes de fichiers : `xargs` est plus efficace en mémoire
  • Traitement parallèle : `xargs -P`
  • Limite de longueur de ligne de commande : `xargs` divise automatiquement le traitement.

Commandes de la même catégorie