Der Befehl xargs wird normalerweise in einer Befehlszeile verwendet, in der die Ausgabe eines Befehls als Eingabeargumente an einen anderen Befehl übergeben wird.
In vielen Fällen ist dafür kein spezieller Befehl wie xargs erforderlich, da die Operatoren "Pipe" und "Umleitung" dieselbe Transaktion ausführen. Manchmal gibt es jedoch Probleme mit dem grundlegenden Piping- und Umleitungsmechanismus, z. B. wenn Argumente Leerzeichen enthalten, die xargs überwindet.
Außerdem führt xargs den angegebenen Befehl ggf. wiederholt aus, um alle ihm gegebenen Argumente zu verarbeiten. Tatsächlich können Sie angeben, wie viele Argumente bei jeder Ausführung des angegebenen Befehls von xargs aus dem Standardeingabestrom gelesen werden sollen.
Im Allgemeinen sollte der Befehl xargs verwendet werden, wenn die Ausgabe eines Befehls als Teil der Optionen oder Argumente eines zweiten Befehls verwendet werden soll, an den die Daten gestreamt werden (mithilfe des Pipe-Operators "|"). Regelmäßiges Piping ist ausreichend, wenn die Daten die (Standard-) Eingabe des zweiten Befehls sein sollen.
Wenn Sie beispielsweise den Befehl ls verwenden, um eine Liste mit Dateinamen und Verzeichnissen zu generieren, und diese Liste dann in den xargs-Befehl zur Ausführung des Echos weiterleiten, können Sie wie folgt festlegen, wie viele Dateinamen oder Verzeichnisnamen durch Echo bei jeder Iteration verarbeitet werden :
ls | Xargs -n 5 Echo
In diesem Fall empfängt das Echo jeweils fünf Datei- oder Verzeichnisnamen. Da das Echo am Ende ein neues Zeilenzeichen hinzufügt, werden in jede Zeile fünf Namen geschrieben.
Wenn Sie einen Befehl ausführen, der eine große und unvorhersehbare Anzahl von Elementen (z. B. Dateinamen) zurückgibt, die zur weiteren Verarbeitung an einen anderen Befehl übergeben werden, empfiehlt es sich, die maximale Anzahl der Argumente zu steuern, die der zweite Befehl erhält, um Überladung und Absturz zu vermeiden.
Die folgende Befehlszeile partitioniert den Strom von Dateinamen, der durch Auffinden der Gruppen von 200 erzeugt wurde, bevor sie an den Befehl cp übergeben werden, der sie in den Befehl kopiert Backup Verzeichnis.
find ./ -type f -name "* .txt" -print | xargs -l200 -i cp -f {} ./backup
Das Element "./" im Befehl find gibt das aktuelle Verzeichnis für die Suche an. Das Argument "-type f" beschränkt die Suche auf Dateien, und das Flag "-name" * .txt "filtert außerdem alles heraus, das keine Erweiterung" .txt "hat -ich Flag in Xargs signalisiert, dass die {} Notation steht für jeden Dateinamen des Steam.
Der folgende Befehl findet Dateien mit dem Namen core im oder unterhalb des Verzeichnisses / tmp und löscht sie.
find / tmp -name Kerntyp f -print | xargs / bin / rm -f
Beachten Sie, dass dies falsch funktioniert, wenn Dateinamen Zeilenumbrüche, einfache oder doppelte Anführungszeichen oder Leerzeichen enthalten. In der folgenden Version werden die Dateinamen so verarbeitet, dass Datei- oder Verzeichnisnamen, die einfache oder doppelte Anführungszeichen, Leerzeichen oder Zeilenumbrüche enthalten, korrekt verarbeitet werden.
find / tmp -name Kerntyp f -print0 | xargs -0 / bin / rm -f
Anstatt der -ich Option können Sie auch die verwenden -ICH Flag, das die Zeichenfolge angibt, die in den Befehlsargumenten wie in diesem Beispiel durch die Eingabezeile ersetzt wird:
ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>
Die Ersatzzeichenfolge ist als "{}" definiert. Dies bedeutet, dass Vorkommen von "{}" in den Befehlsargumenten durch das Eingabeelement ersetzt werden, das über die Pipe-Operation an args weitergeleitet wird. Dadurch können Sie die Eingabeelemente an bestimmten Positionen in den Argumenten des Befehls platzieren, die (wiederholt) ausgeführt werden sollen.




