accueil > Environnement & utilitaires > xargs

xargs -I : Convertir les éléments d'entrée en arguments de commande

xargs est un utilitaire puissant qui lit des éléments de l'entrée standard, les convertit en arguments pour une autre commande, puis exécute cette commande. En particulier, l'option -I permet de remplacer chaque ligne d'entrée par une chaîne de remplacement spécifiée, ce qui est très utile pour traiter en toute sécurité des commandes même lorsque les noms de fichiers contiennent des espaces ou des caractères spéciaux.

Aperçu

xargs prend l'entrée standard transmise via un pipe (|), la convertit en arguments pour une autre commande, puis l'exécute. L'option -I est utile pour exécuter une commande en remplaçant chaque ligne d'entrée par une chaîne de remplacement spécifiée, ce qui permet de traiter en toute sécurité les noms de fichiers, même s'ils contiennent des espaces ou des caractères spéciaux.

Caractéristiques principales

  • Convertit les éléments d'entrée en arguments pour d'autres commandes
  • Exécution flexible de commandes à l'aide de placeholders (-I)
  • Traitement sécurisé des noms de fichiers contenant des espaces et des caractères spéciaux
  • Prise en charge du traitement parallèle (-P)

Options principales

La commande xargs offre diverses options, mais nous présentons ici les options principales fréquemment utilisées avec l'option -I.

Placeholders et traitement de l'entrée

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

Divers exemples d'utilisation de la commande xargs avec l'option -I.

Déplacer les fichiers trouvés vers un répertoire spécifique

find . -name "*.txt" -print0 | xargs -0 -I {} mv {} /tmp/new_dir

Trouve tous les fichiers avec l'extension '.txt' dans le répertoire courant et les déplace vers '/tmp/new_dir'. Traite en toute sécurité même si les noms de fichiers contiennent des espaces.

Modifier le contenu des fichiers contenant une chaîne spécifique

grep -l "old_text" *.txt | xargs -I {} sed -i 's/old_text/new_text/g' {}

Remplace 'old_text' par 'new_text' dans tous les fichiers '.txt' du répertoire courant. L'option -l affiche uniquement les noms de fichiers.

Supprimer les noms de fichiers contenant des espaces

find . -name "my file.txt" -print0 | xargs -0 -I {} rm {}

Supprime en toute sécurité le fichier 'my file.txt' dont le nom contient des espaces. La combinaison des options -print0 et -0 est importante.

Exécuter une commande distincte pour chaque fichier

ls *.log | xargs -I file_name echo "Processing file: file_name"

Affiche le message 'Processing file: [nom du fichier]' pour tous les fichiers '.log' du répertoire courant.

Conseils et précautions

Conseils utiles et points à considérer lors de l'utilisation de l'option xargs -I.

xargs -I vs xargs -0

Les deux options traitent les éléments d'entrée, mais de manière différente.

  • -I (replace-str): Remplace chaque 'ligne' d'entrée par un placeholder. Comme les lignes sont séparées par des caractères de nouvelle ligne, des problèmes peuvent survenir si les noms de fichiers contiennent des nouvelles lignes.
  • -0: Suppose que les éléments d'entrée sont séparés par des caractères NUL. L'utilisation avec 'find -print0' permet de traiter le plus sûrement les noms de fichiers contenant des espaces, des nouvelles lignes et des caractères spéciaux.

Attention lors de l'utilisation avec la commande rm

Soyez extrêmement prudent lorsque vous utilisez xargs pour exécuter la commande 'rm'. Vous pourriez accidentellement supprimer des fichiers importants. Envisagez d'abord de vérifier les commandes à exécuter à l'aide de 'echo' ou de l'option '-t', ou d'utiliser une option interactive comme 'rm -i'.

Utilisation du traitement parallèle (-P)

Lorsque vous traitez de grandes quantités de fichiers ou des tâches qui prennent beaucoup de temps, l'utilisation de l'option '-P' pour exécuter plusieurs processus simultanément peut considérablement réduire le temps de traitement. Par exemple, 'xargs -P 4' exécute 4 processus en parallèle.


Commandes de la même catégorie