xargs pour les débutants avec des exemples

xargs pour les débutants avec des exemples

En utilisant xargs, Décrit dans le manuel Linux Xargs comme un outil qui construit et exécute les lignes de commande à partir de l'entrée standard, peut-il exercer une quantité importante de puissance supplémentaire sur toute autre commande exécutée sur la ligne de commande bash. Essentiellement, xargs prendra la sortie de tout autre outil, et l'utilisera car sa propre entrée pour un traitement et une action supplémentaires (d'où la référence à l'exécution de lignes de commande dans le manuel). Si c'est vos premières semaines ou mois avec xargs, ou vous commencez juste, c'est le meilleur endroit pour vous entrer dans xargs.

Dans ce tutoriel, vous apprendrez:

  • Comment utiliser xargs de la ligne de commande à bash
  • Comment xargs fonctionne, ce qu'il fait et comment bien l'utiliser
  • Exemples d'utilisation de base en utilisant xargs de la ligne de commande à bash
xargs pour les débutants avec des exemples

Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Indépendant de la distribution Linux
Logiciel Ligne de commande bash, système basé sur Linux
Autre Le xargs L'utilité est incluse dans la coquille de bash par défaut
Conventions # - nécessite que les commandes Linux sont exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - Exige que les commandes données sont exécutées en tant qu'utilisateur non privilégié régulier


Exemple 1: un simple début

Plongeons tout de suite avec un simple xargs exemple:

$ echo '1'> 1 $ echo '2'> 2 $ echo '3'> 3 $ ls 1 2 3 $ ls | xargs chat 1 2 3 

Dans cet exemple, nous avons rapidement créé 3 fichiers en faisant écho à un nombre, puis en redirigeant la sortie (en utilisant >) à 3 fichiers individuels nommés 1 pour 3. Après cela, nous avons vérifié l'existence des fichiers avec le LS Commande (répertorier les contenus du répertoire).

Dans la dernière commande, nous avons utilisé le LS et tuyaux (en utilisant |) c'est la sortie de xargs. Après le xargs Commande Nous avons répertorié la nouvelle commande que nous voulions xargs éxécuter pour toute entrée qu'il a reçue, individuellement par entrée, dans ce cas chat (qui publie le contenu d'un fichier).

Fondamentalement, la commande ci-dessus est analogue à l'ensemble de commandes suivant (bien que si le contenu du répertoire change, il ne serait plus analogue comme le xargs comprendra simplement de nouvelles entrées de répertoire):

$ chat 1 1 $ chat 2 2 $ chat 3 3 

Exemple 2: un peu plus complexe

$ ls --color = jamais | xargs -i  chat  1 2 3 

Ici, nous avons ajouté quelques idiomes de syntaxe bash (un idiome est une construction / expression de langage) pour améliorer considérablement la qualité et peut-être la lisibilité du même script à une ligne, bien que la sortie - dans ce cas - soit restée la même.

Le -JE option de xargs définit un remplacer chaîne qui sera utilisée à l'intérieur de la commande xargs pour insérer, au point où la chaîne de remplacement est à nouveau utilisée, l'entrée reçue, et celle pour chaque entrée individuellement - i.e. la commande spécifiée après le xargs La commande sera exécutée pour chaque entrée individuellement.

Le --color = jamais L'ajout rend la sortie générée par le LS commande (et donc l'entrée du xargs commande) beaucoup plus sûr.

Exemple 3: sortie buggy

Dans le dernier exemple, nous avons introduit --color = jamais En tant qu'option recommandée. Regardons un exemple de la façon dont - sans cette option - nous pouvons rencontrer des problèmes:

La sortie LS est entachée après l'utilisation de xargs, nécessitant l'utilisation de l'option -color = jamais à ls
$ mkdir 1 2 3 $ ls 1 2 3 $ ls | xargs ls ls: ne peut pas accéder "


Sortie intéressante 🙂 Alors ce qui s'est passé ici?

Nous avons d'abord créé trois répertoires, 1 pour 3, et a ensuite vérifié sa création. Remarquez que la sortie est bleu foncé, gracieuseté de Bash Shell Colors, qui sont configurées par défaut, par exemple Ubuntu.

Ensuite, nous avons pris la production de LS et l'a passé à xargs qui à son tour l'a ramené à LS. Similaire à 'Echo 1 | ls 'on s'attendrait. Mais cela n'a pas fonctionné! Au lieu de cela, nous avons reçu un ensemble de codes couleur Backr. Quiconque le voit pour la première fois aurait du mal à le relier à des codes couleur.

Ajout d'une option simple --color = jamais désinfecté le LS la sortie comme une entrée plus appropriée pour xargs, Et la sortie semble comme prévu: pour les répertoires 1 pour 3, comme sortie par le LS Commande, énumérez le contenu (i.e. semblable à ls 1; ls 2; LS3).

Exemple 4: analyse de texte avec xargs et sed

$ echo -e '1 \ n2 \ n3'> Tester $ Cat Test 1 2 3 $ ls test $ ls --color = jamais | xargs -i  cat  | sed 'S | [2-3] | 0 |' 1 0 0 $ ls --color = jamais | xargs -i  cat  | sed 'S | [2-3] | 0 |' | xargs -i  grep  $ (ls) 1 

Un exemple un peu plus difficile, mais vous le comprendrez bientôt.

La première commande a simplement créé un fichier avec trois lignes (\ n crée une nouvelle ligne, et le -e L'option pour faire écho permet au \ n à utiliser). Ensuite, nous publions le contenu du fichier en utilisant chat, et vérifié combien de fichiers étaient présents en utilisant LS (un seul; le test fichier que nous avons créé).

Ensuite, nous avons notre commande Juicy Xargs, qui - comme vous le savez à partir d'exemples précédents - prend la liste du répertoire, l'envoie à xargs et sort le contenu de chaque fichier passé en utilisant chat. Ensuite, nous avons un petit sed commande qui remplace les nombres 2 et 3 à 0. La sortie est le contenu complet du fichier de test, mais avec le 2 et 3 changé en 0 comme indiqué.

Enfin, nous prenons la même commande et la transmettons à un autre xargs. Pensez-y comme ça; visuellement (dans votre esprit) voir le 1, 0, 0 la sortie de la commande précédente en cours de tuyau|) dans la finale xargs sans la complexité précédente. Voyez comment vous pouvez créer des commandes très complexes progressivement comme celle-ci? Cela montre également la puissance de xargs en un mot, bien que beaucoup plus est possible.

Dans la commande finale, nous passons cela 1, 0, 0 sortie dans grep, qui fouillera le contenu de $ (ls). $ () démarre une sous-coquille, exécute la commande de la commande et insère la sortie de cette commande à l'endroit où la sous-coquille a été appelée. En d'autres termes, nous exécutons:

grep '1' ./ tester grep '0' ./ tester grep '0' ./test 

Et les résultats sont en effet comme prévu; 1 seulement, car il n'y avait pas de zéros dans le fichier pour commencer.

Conclusion

Dans cet article, nous avons examiné les bases du xargs commande et quelques exemple de comment xargs Peut être utilisé, y compris l'analyse de texte et la manipulation de la liste des répertoires. Mon prochain article sera sur plus avancé xargs utilisation, y compris des exemples supplémentaires.

Apprécier xargs Et laissez-nous un commentaire avec votre plus cool xargs lignes de commande ou scripts!

Tutoriels Linux connexes:

  • Exemples sur la façon d'utiliser la commande xargs sur Linux
  • Xargs multithreads avec des exemples
  • Choses à installer sur Ubuntu 20.04
  • Boucles imbriquées dans les scripts bash
  • Masterring Bash Script Loops
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Commandes Linux de base
  • Commandes Linux: les 20 meilleures commandes les plus importantes que vous devez…
  • Exemples de liner complexe Linux Bash