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

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

Ich verstehe, dass die -exec kann ein + annehmen Option, um das Verhalten von xargs nachzuahmen . Gibt es Situationen, in denen Sie eine Form der anderen vorziehen würden?

Ich persönlich bevorzuge eher die erste Form, schon allein um die Verwendung einer Pfeife zu vermeiden. Ich denke sicher die Entwickler von find muss die entsprechenden Optimierungen vorgenommen haben. Liege ich richtig?

Akzeptierte Antwort:

Vielleicht möchten Sie verkettete Anrufe finden (einst, als Sie erfuhren, dass es möglich ist, was heute der Fall sein könnte). Dies ist natürlich nur möglich, solange Sie in Fund bleiben. Sobald Sie zu xargs geleitet haben, ist es außerhalb des Gültigkeitsbereichs.

Kleines Beispiel, zwei Dateien a.lst und b.lst:

cat a.lst
fuddel.sh
fiddel.sh

cat b.lst
fuddel.sh

Kein Trick hier – einfach die Tatsache, dass beide „fuddel“ enthalten, aber nur einer „fiddel“.

Angenommen, wir wüssten das nicht. Wir suchen eine Datei, die 2 Bedingungen erfüllt:

find -exec grep -q fuddel {} ";" -exec grep -q fiddel {} ";" -ls
192097    4 -rw-r--r--   1 stefan   stefan         20 Jun 27 17:05 ./a.lst

Nun, vielleicht kennen Sie die Syntax für grep oder ein anderes Programm, um beide Zeichenfolgen als Bedingung zu übergeben, aber darum geht es nicht. Jedes Programm, das mit einer Datei als Argument true oder false zurückgeben kann, kann hier verwendet werden – grep war nur ein beliebtes Beispiel.

Und beachten Sie, dass Sie find -exec folgen können mit anderen Suchbefehlen wie -ls oder -löschen oder etwas ähnliches. Beachten Sie, dass delete nicht nur rm (Dateien entfernt), sondern auch rmdir (Verzeichnisse entfernt) bewirkt.

Eine solche Kette wird als UND-Verknüpfung von Befehlen gelesen, sofern nicht anders angegeben (nämlich mit einem -or switch (und Parens (die maskiert werden müssen))).

Sie verlassen also nicht die Suchkette, was eine praktische Sache ist. Ich sehe keinen Vorteil in der Verwendung von -xargs, da Sie beim Übergeben der Dateien vorsichtig sein müssen, was find nicht tun muss – es behandelt automatisch jede Datei als einzelnes Argument für Sie.

Wenn Sie glauben, dass Sie etwas maskieren müssen, um Klammern zu finden, können Sie gerne meine Frage besuchen, die nach Beweisen fragt. Meine Behauptung ist:Tust du nicht.

Verwandte:Einhaltung -Bedeutung finden- Dictionary Lookup!
Linux
  1. Rekursives Grep Vs Find / -type F -exec Grep {}; Was ist effizienter/schneller?

  2. Brechen Sie von Find ab, wenn ein -exec fehlschlägt?

  3. Wie finde ich heraus, welcher serielle Port verwendet wird?

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

  5. finde -exec eine Shell-Funktion in Linux?

CentOS vs. Ubuntu – welches Sie für Ihren Webserver wählen sollten

Ubuntu vs. Fedora:Welches sollten Sie wählen?

So finden Sie heraus, welcher Dienst an einem bestimmten Port lauscht

Wie kann man Xargs sagen, welches Argument es wählen soll?

Linux Mint Cinnamon vs. MATE:Was soll man wählen?

Warum sollte man sudo verwenden?