Dies kann find
direkt erfolgen mit -exec
:
find . -name "*.xml" -type f -exec xmllint --output '{}' --format '{}' \;
Was übergeben wird, -exec
wird einmal pro gefundener Datei aufgerufen, wobei die Vorlagenparameter {}
durch den aktuellen Dateinamen ersetzt werden. Der \;
Befehl am Ende des Suchvorgangs beendet nur die Zeile.
Die Verwendung von xargs
ist in diesem Fall nicht wirklich erforderlich, da wir xmllint
einmal pro Datei aufrufen müssen, da sowohl der Name der Eingabe- als auch der Ausgabedatei innerhalb desselben Aufrufs angegeben werden muss.
xargs
Dies wäre erforderlich, wenn der Befehl, an den von find weitergeleitet wird, mehrere Dateien gleichzeitig bearbeitet und diese Liste lang wäre. In diesem Fall können Sie dies nicht tun, da Sie den einzelnen Dateinamen an die --output
Option übergeben müssen xmllint
. Ohne xargs
könnten Sie den Fehler "Argumentliste zu lang" erhalten, wenn Sie viele Dateien verarbeiten. xargs
unterstützt auch Zeichenfolgen zum Ersetzen von Dateien mit der -I
Option:
find . -name "*.xml" -type f | xargs -I'{}' xmllint --output '{}' --format '{}'
Würde das gleiche tun wie der find -exec
obige Befehl. Wenn einer Ihrer Ordner ungerade Zeichen in ähnlichen Bereichen enthält, müssen Sie die -0
Optionen von find
und verwenden xargs
. Die Verwendung xargs
mit -I
impliziert jedoch die Option -L 1
, dh, es wird ohnehin nur 1 Datei gleichzeitig verarbeitet. Sie können sie also auch direkt find
mit verwenden -exec
.