GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Eine große Anzahl von XML-Dateien neu formatieren?

Ich bearbeite eine große Anzahl von XML-Dateien, die über eine verschachtelte Verzeichnisstruktur verstreut sind.

Folgendes habe ich versucht:

$ find . -name "*.xml" -type f | xargs -- xmllint --format

Das Problem besteht darin, dass die formatierte XML-Ausgabe auf dem Bildschirm generiert wird, die Datei jedoch nicht geändert wird.

Wie kann ich diesen Befehl so ändern, dass der eigentliche Dateiinhalt geändert wird?

Akzeptierte Antwort:

Dies kann über find erfolgen direkt mit -exec :

find . -name "*.xml" -type f -exec xmllint --output '{}' --format '{}' \;

Was an -exec übergeben wird wird einmal pro Datei aufgerufen, die mit den Vorlagenparametern {} gefunden wird durch den aktuellen Dateinamen ersetzt. Der \; am Ende des Find-Befehls beendet nur die Zeile.

Die Verwendung von xargs ist in diesem Fall nicht wirklich notwendig, da wir xmllint aufrufen müssen einmal pro Datei, da sowohl die Eingabe- als auch die Ausgabedateinamen innerhalb desselben Aufrufs angegeben werden müssen.

xargs erforderlich, wenn der Befehl, zu dem von find geleitet wird, an mehreren Dateien gleichzeitig arbeitet und diese Liste lang ist. Das ist in diesem Fall nicht möglich, da Sie den einzelnen Dateinamen an --output übergeben müssen Option von xmllint . Ohne xargs Sie könnten mit dem Fehler „Argument List too long“ enden, wenn Sie viele Dateien verarbeiten. xargs unterstützt auch Dateiersetzungszeichenfolgen mit dem -I Möglichkeit:

find . -name "*.xml" -type f | xargs -I'{}' xmllint --output '{}' --format '{}'

Würde dasselbe tun wie find -exec Befehl oben. Wenn einer Ihrer Ordner ungerade Zeichen in gleichen Leerzeichen enthält, müssen Sie den -0 verwenden Optionen von find und xargs . Aber mit xargs mit -I impliziert die Option -L 1 was bedeutet, dass sowieso nur 1 Datei gleichzeitig verarbeitet wird, also können Sie auch direkt find verwenden mit -exec .


Linux
  1. So finden Sie die Anzahl der Dateien in einem Verzeichnis und Unterverzeichnissen

  2. Wie zähle ich die Anzahl der Dateien in jedem Verzeichnis?

  3. Entfernen von Dateien mit rm unter Verwendung von find und xargs

  4. Zählen der Anzahl der Dateien in einem Verzeichnis mit einem OSX-Terminalbefehl

  5. Wie zähle ich die Gesamtzahl der Zeilen der gefundenen Dateien?

So finden Sie Dateien unter Linux

Finden Sie große Dateien in Linux

So verschieben Sie eine große Anzahl von Dateien in Linux

So kopieren Sie eine große Anzahl von Dateien unter Linux

Linux:Anzahl der Dateien in einem Verzeichnis und Unterverzeichnissen finden

Was ist der effizienteste Weg, um eine große Anzahl von Dateien zu verschieben, die sich in einem einzigen Verzeichnis befinden?