"mit Namen, die aus der Standardeingabe gelesen wurden" bedeutet, dass xargs
die in der Standardeingabe eingehenden Daten übernommen, aufgeteilt und zum Ausführen des in den Argumenten angegebenen Befehls verwendet werden. Standardmäßig wird es in Leerzeichen oder Zeilenumbrüche aufgeteilt und echo
mit so vielen Argumenten wie möglich gleichzeitig ausgeführt.
Die -0
Option in Ihrem Beispiel weist xargs
an, die Eingabe auf Null-Bytes anstelle von Leerzeichen oder Zeilenumbrüchen aufzuteilen. In Kombination mit find
's' -print0
können Dateinamen, die Leerzeichen oder Zeilenumbrüche enthalten, ordnungsgemäß behandelt werden.
Die -I
Option ändert die Art und Weise, wie die neuen Befehlszeilen erstellt werden. Anstatt so viele Argumente wie möglich gleichzeitig hinzuzufügen, xargs
nehmen Sie jeweils einen Namen aus der Eingabe, suchen Sie nach dem angegebenen Token ( {}
hier) und ersetzen Sie diesen durch den Namen.
In Ihrem Beispiel {}
ist es nicht in der Befehlsvorlage enthalten, die an übergeben xargs
wurde. Daher xargs
wird es angewiesen echo
, für jeden Dateinamen, der von angegeben wird, einmal ohne Argument auszuführen find
. Um dies zu sehen, lassen Sie Folgendes fallen wc
:
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo
Sie sehen eine Reihe von Leerzeilen ... Vergleichen Sie dies mit
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo {}
und
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0 echo
und
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0
um ein besseres Verständnis zu bekommen.