Einführung
Bestimmte Linux-Befehle nehmen Eingaben sowohl von der Standardeingabe (stdin) als auch als Befehlszeilenargument entgegen. Andere sind jedoch so konzipiert, dass sie die Eingabe nur als Argument akzeptieren. Um die Standardeingabe verarbeiten zu können, müssen diese Linux-Befehle die xargs
verwenden Befehl.
In diesem Tutorial lernen Sie, wie Sie die xargs
von Linux verwenden Befehl, um die Standardeingabe zu manipulieren und mit anderen Befehlen zu arbeiten.
Voraussetzungen
- Ein System, auf dem Linux ausgeführt wird
- Zugriff auf die Befehlszeile
Was ist der xargs-Befehl?
Die xargs
Befehl erstellt und führt Befehle aus, die über die Standardeingabe bereitgestellt werden. Es nimmt die Eingabe und wandelt sie in ein Befehlsargument für einen anderen Befehl um. Diese Funktion ist besonders nützlich bei der Dateiverwaltung, wo xargs
wird in Kombination mit rm
verwendet , cp
, mkdir
, und andere ähnliche Befehle.
Verwendung des xargs-Befehls mit Beispielen
Bei alleiniger Verwendung xargs
fordert den Benutzer auf, eine Textzeichenfolge einzugeben, die dann an echo
übergeben wird Befehl.
Das Beispiel zeigt eine Beispieleingabe, gefolgt von der Ausgabe von echo
Befehl.
Kombiniere xargs mit find
Der find-Befehl steht oft vor xargs
in einer Rohrleitung. Verwenden Sie es, um eine Liste von Dateien zur weiteren Verarbeitung durch xargs
bereitzustellen . Die Syntax sieht folgendermaßen aus:
find [location] -name "[search-term]" -type f | xargs [command]
Das obige Beispiel zeigt die Verwendung von find
Befehl, um alle Dateien mit dem .sh
zu finden Verlängerung. Die Liste der Dateien wird dann an xargs
geleitet , die den rm
verwendet Befehl, sie zu löschen.
Allerdings xargs
enthält nicht automatisch Dateien, deren Namen Leerzeichen enthalten. Um auch diese Dateien einzuschließen, verwenden Sie -print0
Option für find
, und -0
Option für xargs
:
find [location] -name "[search-term]" -type f -print0 | xargs -0 [command]
rm
löscht jetzt alle Dateien mit der .sh
Erweiterung.
Xargs mit grep kombinieren
Verwenden Sie xargs
mit dem Befehl grep, um in der Liste der Dateien, die von find
bereitgestellt werden, nach einer Zeichenfolge zu suchen Befehl.
find . -name '[search-term]' | xargs grep '[string-to-find-in-files]'
Das obige Beispiel hat nach allen Dateien mit dem .txt
gesucht -Erweiterung und leitete sie an xargs
weiter , die dann grep
ausführte befehle ihnen.
Xargs-Mehrfachbefehle
Um mehr als einen Befehl mit xargs
auszuführen verwenden Sie das -I
Möglichkeit. Die Syntax lautet:
[command-providing-input] | xargs -I % sh -c '[command-1] %; [command-2] %'
Im Beispiel der Inhalt von file4.txt
wurden zuerst angezeigt. Dann mkdir
erstellte einen Ordner für jedes Wort in der Datei.
Elemente aus Datei lesen
Wie bereits erwähnt, xargs
liest die Standardeingabe. Verwenden Sie den -a
Option, stattdessen den Inhalt einer Datei zu lesen.
xargs -a [filename]
Suchen und archivieren Sie Bilder mit tar
Bei Verwendung mit dem tar-Befehl xargs
erstellt eine tar.gz
Archiv und füllt es mit Dateien, die von find
bereitgestellt werden Befehl.
find [location] -name "[search-term]" -type f -print0 | xargs -0 tar -cvzf [tar-gz-archive-name]
Druckbefehl
Um die von xargs
ausgeführten Befehle anzuzeigen Verwenden Sie in der Standardausgabe das -t
Option.
[command-providing-input] | xargs -t [command]
Beachten Sie im obigen Beispiel, dass xargs
führte den mkdir-Befehl für die gesamte von echo
bereitgestellte Zeichenfolge aus .
Xargs-Befehlsausführung genehmigen
Einige xargs
Vorgänge wie das Entfernen von Dateien und Ordnern sind irreversibel. Um die Ausführung dieser Befehle zu steuern, verwenden Sie -p
Option.
[command-providing-input] | xargs -p [command]
Wenn Sie den Befehl mit -p
ausführen Option xargs
zeigt vor der Ausführung eine Bestätigungszeile an. Geben Sie y
ein um fortzufahren, oder n
um den Vorgang abzubrechen.
Ausgabe pro Zeile begrenzen
Manchmal ist es notwendig, die Anzahl der Argumente xargs
zu kontrollieren nimmt gleichzeitig. Führen Sie diese Aktion mit -n
aus Option gefolgt von der Anzahl der Argumente, die Sie einschränken xargs
zu:
[command-providing-input] | xargs -n [number] [command]
Im folgenden Beispiel xargs
nimmt den String aus dem echo
Befehl und teilt es in drei Teile. Dann führt es ein weiteres echo
aus für jeden der Teile:
Geben Sie das Trennzeichen an
Die standardmäßigen xargs
Trennzeichen ist ein Leerzeichen. Um das Standardtrennzeichen zu ändern, verwenden Sie -d
Befehl gefolgt von einem einzelnen Zeichen oder einem Escape-Zeichen wie n
(eine neue Zeile).
[command-providing-input] | xargs -d [new-delimiter] | xargs [command]
Im folgenden Beispiel sind die xargs
weist das System an, *
zu verwenden als Trennzeichen und wenden Sie mkdir
an zu jedem der erhaltenen Argumente.
Alle Linux-Benutzerkonten auf dem System auflisten
Verwenden Sie xargs
um die Ausgabe der Befehle zu organisieren, wie z. B. cut
. Betrachten Sie das folgende Beispiel:
cut -d: -f1 < /etc/passwd | sort | xargs
Der cut-Befehl greift auf /etc/passwd
zu Datei und verwendet den :
Trennzeichen, um den Anfang jeder Zeile in der Datei abzuschneiden. Die Ausgabe wird dann an sort
geleitet , der die empfangenen Zeichenfolgen sortiert, und schließlich zu xargs
das zeigt sie an:
Leerzeichen im String entfernen
Da xargs
Leerzeichen bei der Suche nach Argumenten ignoriert, ist der Befehl nützlich, um unnötige Leerzeichen aus Zeichenfolgen zu entfernen.
echo "[string-with-unnecessary-spaces]" | xargs
Listen Sie die Anzahl der Zeilen/Wörter/Zeichen in jeder Datei auf
Verwenden Sie xargs
mit dem wc-Befehl, um eine Liste von Dateien mit Zeilen-, Wort- und Zeichenanzahl anzuzeigen.
ls | xargs wc
Das folgende Beispiel wies den ls-Befehl an, an xargs
zu leiten nur die Dateien, die das Wort „Beispiel“ enthalten. xargs
dann angewendet wc
zu dieser Liste:
Datei in mehrere Verzeichnisse kopieren
Kopieren Sie Dateien mithilfe von xargs
in mehrere Verzeichnisse Befehl. Die Syntax ist einfach:
echo [directory-1] [directory-2] | xargs -n 1 cp -v [filename]
Das echo
Der Befehl stellt Verzeichnisnamen und xargs
bereit verwendet den cp-Befehl, um die angegebene Datei in jedes der Verzeichnisse zu kopieren.