Der Geschwindigkeitsunterschied wird unbedeutend sein.
Aber Sie müssen Folgendes sicherstellen:
-
Ihr Skript geht nicht davon aus, dass nofile im Dateinamen Leerzeichen, Tabulatoren usw. enthält. Die erste Version ist sicher, die zweite nicht.
-
Ihr Skript behandelt keine Datei, die mit „
-
beginnt " als Option.
Ihr Code sollte also so aussehen:
find . -exec cmd -option1 -option2 -- {} +
oder
find . -print0 | xargs -0 cmd -option1 -option2 --
Die erste Version ist kürzer und einfacher zu schreiben, da Sie 1 ignorieren können, aber die zweite Version ist portabler und sicherer, da "-exec cmd {} +
" ist eine relativ neue Option in GNU findutils (seit 2005 haben viele laufende Systeme sie noch nicht) und war in letzter Zeit fehlerhaft. Außerdem kennen viele Leute diese "-exec cmd {} +
", wie Sie den anderen Antworten entnehmen können.
find . | xargs cmd
ist effizienter (es läuft cmd
so wenig wie möglich, im Gegensatz zu exec
, das cmd
ausführt einmal pro Spiel). Sie werden jedoch Probleme bekommen, wenn Dateinamen Leerzeichen oder ungewöhnliche Zeichen enthalten.
Folgendes wird zur Verwendung vorgeschlagen:
find . -print0 | xargs -0 cmd
dies funktioniert auch dann, wenn Dateinamen seltsame Zeichen enthalten (-print0
macht find
NUL-terminierte Übereinstimmungen ausgeben, -0
macht xargs
dieses Format erwarten.)
Modernes xargs
Die Versionen von unterstützen häufig die parallele Pipeline-Ausführung.
Offensichtlich könnte es ein Dreh- und Angelpunkt sein, wenn es um die Wahl zwischen find … -exec
geht und… | xargs