
Es scheint eine Reihe von Möglichkeiten zu geben, dies zu tun, einschließlich Schleifen in Shell-Skripten, Find und Xargs. Welche davon ist die beste und welche ist am portabelsten?
Antwort1
find . -exec <command> {} \;
für das aktuelle Verzeichnis als Wurzel des Baumes oder allgemein:
find <directory> -exec <command> {} \;
Antwort2
Verwenden Sie die -print0
Optionen „Suchen“ und „ -0
Zu“ xargs
, wenn Sie Datei- oder Verzeichnisnamen mit Leerzeichen haben:
find {dir} -print0 | xargs -0r {command}
Die -print0
Option find gibt die Dateinamen als NUL
-getrennte Liste aus, statt als durch Leerzeichen getrennte Liste, während die -0
Option to xargs
anweist, die Eingabe bei NUL
statt bei Leerzeichen zu unterbrechen. Da NUL
es sich um eines der Zeichen handelt, die in Unix-Dateinamen nicht zulässig sind, kann es nicht mit einem Teil eines Dateinamens verwechselt werden.
Die -r
Option ist vorhanden, sodass xargs
bei fehlender Eingabe kein Fehler auftritt.
Antwort3
Wenn die Portabilität ein Problem darstellt, würde ich Shell-spezifische Vorgehensweisen meiden (es gibt viele Leute, die viele verschiedene Shells verwenden, aber im Allgemeinen sind Find und Xargs wirklich grundlegende Tools, die niemand radikal zu ändern wagen würde).
Die Verwendung der grundlegenden Argumente „find“ und „xargs“ sollte Ihnen eine portablere Lösung bieten.
Antwort4
Stellen Sie sicher, dass die von Ihnen verwendete Befehlsversion nicht bereits über ein Flag für rekursive Vorgänge verfügt. :)