Dies kann finddirekt erfolgen mit -exec:
find . -name "*.xml" -type f -exec xmllint --output '{}' --format '{}' \;
Was übergeben wird, -execwird 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 xargsist in diesem Fall nicht wirklich erforderlich, da wir xmllinteinmal pro Datei aufrufen müssen, da sowohl der Name der Eingabe- als auch der Ausgabedatei innerhalb desselben Aufrufs angegeben werden muss.
xargsDies 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 --outputOption übergeben müssen xmllint. Ohne xargskönnten Sie den Fehler "Argumentliste zu lang" erhalten, wenn Sie viele Dateien verarbeiten. xargsunterstützt auch Zeichenfolgen zum Ersetzen von Dateien mit der -IOption:
find . -name "*.xml" -type f | xargs -I'{}' xmllint --output '{}' --format '{}'
Würde das gleiche tun wie der find -execobige Befehl. Wenn einer Ihrer Ordner ungerade Zeichen in ähnlichen Bereichen enthält, müssen Sie die -0Optionen von findund verwenden xargs. Die Verwendung xargsmit -Iimpliziert jedoch die Option -L 1, dh, es wird ohnehin nur 1 Datei gleichzeitig verarbeitet. Sie können sie also auch direkt findmit verwenden -exec.