Vielleicht möchten Sie Anrufe verketten, um zu finden (einmal, als Sie erfuhren, dass es möglich ist, was heute sein könnte). Dies ist natürlich nur möglich, solange Sie in find bleiben. Sobald Sie eine Pipe an xargs gesendet haben, ist dies nicht mehr möglich.
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 eine "Fiddel" enthält.
Angenommen, wir wüssten das nicht. Wir suchen eine Datei, die 2 Bedingungen entspricht:
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 das ist nicht der Punkt. Jedes Programm, das true oder false zurückgeben kann, wenn eine Datei als Argument angegeben wird, kann hier verwendet werden - grep war nur ein beliebtes Beispiel.
Beachten Sie, dass Sie find -exec mit anderen Suchbefehlen wie -ls oder -delete oder ähnlichem folgen können . Beachten Sie, dass delete nicht nur rm (Dateien entfernt), sondern auch rmdir (Verzeichnisse entfernt).
Solch eine Kette wird als UND-Verknüpfung von Befehlen gelesen, sofern nichts anderes angegeben ist (nämlich mit einem -or
Schalter (und Parens (die maskiert werden müssen)).
Sie verlassen also nicht die Suchkette, was praktisch ist. Ich sehe keinen Vorteil in der Verwendung von -xargs, da Sie beim Übergeben der Dateien vorsichtig sein müssen, was bei find nicht erforderlich ist - es wird automatisch jede Datei als einzelnes Argument für Sie übergeben.
Wenn Sie glauben , Sie findet einige Maskierung benötigen {} Klammern , fühlen sich frei , meine Frage zu besuchen , die nach Beweisen fragt. Meine Behauptung ist: Du nicht.
find
. Vielen Dank!