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

find -exec cmd {} + vs | xargs

Der Geschwindigkeitsunterschied wird unbedeutend sein.

Aber Sie müssen Folgendes sicherstellen:

  1. Ihr Skript geht nicht davon aus, dass nofile im Dateinamen Leerzeichen, Tabulatoren usw. enthält. Die erste Version ist sicher, die zweite nicht.

  2. 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


Linux
  1. Rekursives Grep Vs Find / -type F -exec Grep {}; Was ist effizienter/schneller?

  2. Suchen -exec + Vs Finden | Xargs:Welche soll man wählen?

  3. Die Option -exec in Find zum Laufen bringen?

  4. Entferne unbekannte Zeichen aus Zeichenfolge für -exec?

  5. Manipulieren Sie {} Rückgabezeichenfolge von Find -exec?

Xargs-Befehl unter Linux

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

Wie kann ich Alias-Befehle mit xargs verwenden?

Wie führe ich mehrere Befehle aus, wenn ich find verwende?

finden:-exec rm {} \; vs. -delete - warum wird ersteres allgemein empfohlen?

Was ist die korrekte find -exec-Syntax