Xargs ist ein nützlicher Befehl, der als Brücke zwischen zwei Befehlen fungiert, die Ausgabe von eins liest und die andere mit den gelesenen Elementen ausführt. Der Befehl wird am häufigsten in Szenarios verwendet, wenn ein Benutzer nach einem Muster sucht, Dateien entfernt und umbenennt und mehr.

In seiner Grundform liest Xargs Informationen von der Standardeingabe (oder STDIN) und führt einen Befehl einmal oder mehrmals mit den gelesenen Elementen aus.

Zur Veranschaulichung erwartet der folgende Befehl xargs dass der Benutzer eine Datei oder einen Verzeichnisnamen eingeben soll:

 xargs ls -l 

Sobald ein Name eingegeben wurde, übergibt der Befehl xargs diese Informationen an den Befehl ls .

Hier ist die Ausgabe des oben gezeigten Befehls xargs wenn ich ihn von meinem Home-Verzeichnis aus durch Eingabe von "Documents" (ein Unterverzeichnis in meinem Home-Ordner) als Eingabe ausgeführt habe:

Beachten Sie, dass in diesem Fall der Befehl xargs Befehl ls mit dem Verzeichnisnamen als Befehlszeilenargument ausgeführt hat, um eine Liste der in diesem Verzeichnis vorhandenen Dateien zu erstellen.

Während der Befehl xargs in verschiedenen Befehlszeilenoperationen verwendet werden kann, ist er sehr nützlich, wenn er mit dem Befehl find . In diesem Artikel werden wir einige nützliche Beispiele diskutieren, um zu verstehen, wie xargs und find verwendet werden können.

Operationen mit mehreren Dateien

Angenommen, Sie möchten den Inhalt von "ref.txt" in alle TXT-Dateien in einem Verzeichnis kopieren. Während die Aufgabe sonst möglicherweise die Ausführung mehrerer Befehle erfordert, xargs Befehl xargs zusammen mit dem Befehl find das xargs .

Führen Sie einfach den folgenden Befehl aus:

 Finde ./ -name "* .txt" | xargs -n1 cp ../ref.txt 

Um den oben gezeigten Befehl zu verstehen, teilen wir ihn in zwei Teile.

Der erste Teil ist find ./ -name "*.txt", der nach allen .txt-Dateien im aktuellen Verzeichnis sucht.

Der zweite Teil xargs -n1 cp ../ref.txt die Ausgabe des ersten Befehls (die resultierenden Dateinamen) und gibt sie xargs -n1 cp ../ref.txt an den Befehl cp (copy) weiter. Beachten Sie, dass die Option -n hier entscheidend ist, da sie xargs anweist, ein Argument pro Ausführung zu verwenden.

In Kombination kombiniert der vollständige Befehl den Inhalt von "ref.txt" in alle TXT-Dateien im Verzeichnis.

Operationen mit einer großen Anzahl von Argumenten

Einer der Hauptvorteile der Verwendung von xargs ist die Fähigkeit, eine große Anzahl von Argumenten zu verarbeiten. Wenn Sie zum Beispiel eine große Anzahl von Dateien auf einmal löschen, rm Befehl rm manchmal mit einem Fehler " Argument list long " fehl. Das liegt daran, dass es nicht so einfach mit einer so langen Liste von Argumenten umgehen konnte. Dies ist normalerweise der Fall, wenn Sie zu viele Dateien in dem Ordner haben, den Sie löschen möchten.

Dies kann leicht mit xargs behoben werden. Verwenden Sie den folgenden Befehl, um alle diese Dateien zu löschen:

 Finde ./rm-test/ -name "*" -print | xargs rm 

Operationen mit der Mustersuche

Sowohl Softwareentwickler als auch Systemadministratoren führen während der Arbeit an der Befehlszeile viele Mustersuchvorgänge durch. Ein Entwickler möchte z. B. einen kurzen Blick auf die Projektdateien werfen, die eine bestimmte Variable ändern, oder ein Systemadministrator möchte möglicherweise die Dateien sehen, die einen bestimmten Systemkonfigurationsparameter verwenden. In diesen Szenarien erleichtern Ihnen xargs, zusammen mit find und grep, die grep .

Führen Sie beispielsweise den folgenden Befehl aus, um nach allen TXT-Dateien zu suchen, die die Zeichenfolge "maketecheasier" enthalten:

 $ find. / -name "* .txt" | xargs grep "maketecasier" 

Hier ist die Ausgabe des Befehls, der auf meinem System erzeugt wurde:

Ausschneiden / Kopieren von Vorgängen

Xargs kann zusammen mit dem Befehl find auch zum Kopieren oder Verschieben einer Gruppe von Dateien von einem Verzeichnis in ein anderes verwendet werden. Um beispielsweise alle Textdateien, die älter als 10 Minuten sind, aus dem aktuellen Verzeichnis in das vorherige Verzeichnis zu verschieben, verwenden Sie den folgenden Befehl:

 finden . -name "* .txt" -mmin +10 | xargs -n1 -I '{}' mv '{}' ../ 

Die Befehlszeilenoption -I wird vom Befehl xargs, um eine Ersetzungszeichenfolge zu definieren, die durch Namen ersetzt wird, die aus der Ausgabe des Befehls find gelesen werden. Hier ist die Ersetzungszeichenfolge {}, aber es könnte alles sein. Zum Beispiel können Sie "Datei" als Ersetzungszeichenfolge verwenden.

 finden . -name "* .txt" -mmin 10 | xargs -n1 -I 'Datei' mv 'Datei' ./practice 

Wie kann ich xargs sagen, wann ich aufhören soll?

Angenommen, Sie möchten die Details aller TXT-Dateien im aktuellen Verzeichnis auflisten. Wie bereits erläutert, kann dies einfach mit dem folgenden Befehl durchgeführt werden:

 finden . -name "* .txt" | xargs ls -l 

Aber es gibt ein Problem; Der Befehl xargs Befehl ls auch wenn der Befehl find keine TXT-Datei findet. Hier ist ein Beispiel:

So können Sie sehen, dass es keine gibt. TXT- Dateien im Verzeichnis, aber das hat nicht verhindert, dass XARGS den Befehl ls ausführt. Verwenden Sie die Befehlszeilenoption -r um dieses Verhalten zu ändern:

 finden . -name "* .txt" | xargs -r ls -l 

Fazit

Obwohl ich mich hier auf die Verwendung von xargs mit find, kann es auch mit vielen anderen Befehlen verwendet werden. Gehen Sie die Hauptseite des Befehls durch, um mehr darüber zu erfahren, und hinterlassen Sie einen Kommentar, wenn Sie Zweifel / Fragen haben.