Es gibt eine Reihe von Möglichkeiten, dies zu tun, einschließlich Schleifen in Shell-Skripten, find und xargs. Welches ist das Beste und welches ist das Tragbarste?
command-line
scripting
directory
find
Brian Lyttle
quelle
quelle
-name "*.c"
oder zum Beispiel-type d
für Verzeichnisse ...find ... | xargs ...
Idiom, es verarbeitet Dateien in Stapeln und dies ist normalerweise schneller (weniger Prozesse werden gestartet).Verwenden Sie die
-print0
Suchoption und die-0
Option, um nachxargs
Datei- oder Verzeichnisnamen mit Leerzeichen zu suchen :Die
-print0
Option zum Suchen druckt die Dateinamen alsNUL
durch Leerzeichen getrennte Liste aus, während die-0
Optionxargs
zum Unterbrechen der EingabeNUL
anstelle von Leerzeichen angewiesen wird . DaNUL
eines der Zeichen in Unix-Dateinamen nicht zulässig ist, kann es nicht als Teil eines Dateinamens verwechselt werden.Die
-r
Option ist vorhanden, damitxargs
Sie keinen Fehler erhalten, wenn keine Eingabe erfolgt.quelle
Wenn Portabilität ein Problem ist, würde ich mich von Shell-spezifischen Methoden fernhalten (es gibt viele Leute, die viele verschiedene Shells verwenden, aber im Allgemeinen sind find und xargs wirklich grundlegende Werkzeuge, die niemand radikal ändern könnte). .
Wenn Sie die Basisargumente find und xargs verwenden, sollten Sie eine portablere Lösung finden.
quelle
Wenn das Gruppieren von Argumenten akzeptabel ist, finden Sie | xargs liefert wahrscheinlich eine bessere Leistung, da es den Befehl wesentlich seltener ausführt als find -exec. Wenn Sie den Befehl jedes Mal für jede Datei ausführen oder im Unterverzeichnis der Datei ausführen möchten, sollten Sie wahrscheinlich find -exec oder -execdir verwenden.
In der Regel ist es vorzuziehen, sich von Shell-spezifischen Schleifen fernzuhalten. find & xargs reichen für die meisten Szenarien aus.
quelle
Stellen Sie sicher, dass die Version des Befehls, den Sie verwenden, noch kein Flag für die rekursive Operation enthält. :)
quelle
Funktioniert am besten für mich.
quelle