Führen Sie mehrere Operationen in Linux mit dem Befehl 'xargs' aus
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.