Website-Suche

xargs für Einsteiger mit Beispielen


Die Verwendung von xargs, das im Linux-xargs-Handbuch als ein Werkzeug beschrieben wird, das Befehlszeilen aus Standardeingaben erstellt und ausführt, kann einmal eine beträchtliche Menge an zusätzlicher Macht über jeden anderen Befehl ausüben, der auf der Bash-Befehlszeile ausgeführt wird. Grundsätzlich nimmt xargs die Ausgabe von jedem anderen Tool und verwendet diese als eigene Eingabe für die weitere Verarbeitung und Aktion (daher der Verweis auf das Ausführen von Befehlszeilen im Handbuch). Wenn dies Ihre ersten Wochen oder Monate mit xargs sind oder Sie gerade erst anfangen, ist dies der beste Ort für Sie, um in xargs einzusteigen.

In diesem Tutorial lernen Sie:

  • So verwenden Sie xargs über die Befehlszeile in Bash
  • Wie xargs funktioniert, was es tut und wie man es gut einsetzt
  • Grundlegende Anwendungsbeispiele mit xargs über die Befehlszeile in Bash

xargs für Einsteiger mit Beispielen

Verwendete Softwareanforderungen und Konventionen

Beispiel 1: Ein einfacher Start

Lassen Sie uns gleich mit einem einfachen xargs-Beispiel eintauchen:

echo '1' > 1
echo '2' > 2
echo '3' > 3
ls
1  2  3
ls | xargs cat
1
2
3

In diesem Beispiel haben wir schnell 3 Dateien erstellt, indem wir eine Zahl wiedergegeben und dann die Ausgabe (mit >) in 3 einzelne Dateien mit den Namen 1 bis 3 umgeleitet haben. Danach haben wir das Vorhandensein der Dateien mit dem Befehl ls (list directory contents) überprüft.

Im letzten Befehl haben wir das ls verwendet und die Ausgabe (mit |) an xargs weitergeleitet. Nach dem xargs-Befehl haben wir den neuen Befehl aufgelistet, den xargs für jede empfangene Eingabe ausführen sollte, einzeln pro Eingabe, in diesem Fall cat (die den Inhalt einer Datei ausgibt).

Grundsätzlich ist der obige Befehl analog zu den folgenden Befehlen (wenn sich der Verzeichnisinhalt ändern würde, wäre er jedoch nicht mehr analog, da die xargs einfach neue Verzeichniseinträge enthalten):

cat 1
1
cat 2
2
cat 3
3

Beispiel 2: Etwas komplexer

ls --color=never | xargs -I{} cat {}
1
2
3

Hier haben wir ein paar Bash-Syntax-Idiome hinzugefügt (ein Idiom ist ein Sprachkonstrukt/-ausdruck), um die Qualität und vielleicht auch die Lesbarkeit desselben einzeiligen Skripts erheblich zu verbessern, obwohl die Ausgabe – in diesem Fall – gleich geblieben ist.

Die Option -I{} für xargs definiert eine Ersetzungszeichenkette, die innerhalb des Befehls xargs verwendet wird, um an der Stelle, an der die Zeichenkette replace erneut verwendet wird, die empfangene Eingabe einzufügen, und zwar für jede Eingabe einzeln – d.h. der Befehl, der nach dem Befehl xargs angegeben wird, wird für jede Eingabe einzeln ausgeführt.

Der Zusatz --color=never macht die vom Befehl ls erzeugte Ausgabe (und damit die Eingabe des Befehls xargs) viel sicherer.

Beispiel 3: Fehlerhafte Ausgabe

Im letzten Beispiel haben wir --color=never als ratsame Option eingeführt. Schauen wir uns ein Beispiel dafür an, wie wir – ohne diese Option – auf Probleme stoßen können:

Die ls-Ausgabe ist nach der Verwendung von xargs verdorben, so dass die Option –color=never für ls verwendet werden muss

mkdir 1 2 3
ls
1  2  3
ls | xargs ls
ls: cannot access ''

Interessanter Output 🙂 Was ist hier passiert?

Wir haben zunächst drei Verzeichnisse erstellt, 1 bis 3, und anschließend deren Erstellung überprüft. Beachten Sie, dass die Ausgabe dunkelblau ist, dank der Bash-Shell-Farben, die beispielsweise unter Ubuntu standardmäßig eingerichtet sind.

Als nächstes haben wir die Ausgabe von ls an xargs übergeben, die sie wiederum an ls zurückgegeben haben. Ähnlich wie 'echo 1 | L', würde man erwarten. Aber es hat nicht funktioniert! Stattdessen erhielten wir einen Satz Farbcodes backr. Jeder, der dies zum ersten Mal sieht, wird es schwer haben, es mit Farbcodes in Verbindung zu bringen.

Das Hinzufügen einer einfachen Option --color=never bereinigte die ls-Ausgabe als geeignetere Eingabe für xargs, und die Ausgabe sieht wie erwartet aus: für die Verzeichnisse 1 bis 3, als Ausgabe durch den ls-Befehl, listen Sie den Inhalt auf (d.h. ähnlich wie ls 1; ls 2; ls3).

Beispiel 4: Textparsen mit xargs und sed

echo -e '1\n2\n3' > test
cat test
1
2
3
ls
test
ls --color=never | xargs -I{} cat {} | sed 's|[2-3]|0|'
1
0
0
ls --color=never | xargs -I{} cat {} | sed 's|[2-3]|0|' | xargs -I{} grep {} $(ls)
1

Ein etwas schwierigeres Beispiel, aber Sie werden es bald verstehen.

Der erste Befehl erstellte einfach eine Datei mit drei Zeilen (\n erstellt einen Zeilenumbruch, und die Option -e für echo ermöglicht die Verwendung von \n). Als nächstes geben wir den Inhalt der Datei mit cat aus und überprüfen mit ls, wie viele Dateien vorhanden sind (nur eine; die von uns erstellte Testdatei).

Als nächstes haben wir unseren saftigen xargs-Befehl, der – wie Sie aus früheren Beispielen wissen – die Verzeichnisliste nimmt, sie an xargs sendet und den Inhalt jeder Datei ausgibt, die mit cat übergeben wird. Dann haben wir einen kleinen sed-Befehl, der die Zahlen 2 und 3 durch 0 ersetzt. Die Ausgabe ist der vollständige Inhalt der Testdatei, wobei die 2 und 3 jedoch wie angewiesen auf 0 geändert werden.

Schließlich nehmen wir den gleichen Befehl und übergeben ihn an einen anderen xargs. Stellen Sie sich das so vor; Visuell (in Ihrem Kopf) sehen Sie, wie die Ausgabe von 1, 0, 0 aus dem vorherigen Befehl (|) in die endgültigen XARGs geleitet wird, ohne die vorherige Komplexität. Sehen Sie, wie Sie sehr komplexe Befehle nach und nach so erstellen können? Dies zeigt auch die Leistungsfähigkeit von xargs auf den Punkt gebracht, obwohl noch viel mehr möglich ist.

Im letzten Befehl übergeben wir diese Ausgabe 1, 0, 0 an grep, das den Inhalt von $ (ls) durchsucht. $() startet eine Subshell, führt den darin enthaltenen Befehl aus und fügt die Ausgabe dieses Befehls an der Stelle ein, an der die Subshell aufgerufen wurde. Mit anderen Worten, wir führen Folgendes aus:

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

Und das Ergebnis ist in der Tat wie erwartet; 1 nur, da es zu Beginn keine Nullen in der Datei gab.

Schlussfolgerung

In diesem Artikel haben wir uns die Grundlagen des Befehls xargs angesehen und einige Beispiele dafür gegeben, wie xargs verwendet werden kann, einschließlich Textanalyse und Manipulation von Verzeichnislisten. Mein nächster Artikel wird sich mit der fortgeschrittenen Verwendung von xargs befassen, einschließlich zusätzlicher Beispiele.

Viel Spaß mit xargs und hinterlassen Sie uns einen Kommentar mit Ihren coolsten xargs-Befehlszeilen oder Skripten!

Verwandte Artikel: