Am Mittwoch, 28. Februar 2007 schrieb Joerg Thuemmler:
David Haller wrote:
Hallo,
Am Mit, 28 Feb 2007, Dr. Jürgen Vollmer schrieb:
Am Dienstag, 27. Februar 2007 schrieb David Haller:
Am Die, 27 Feb 2007, Dr. Jürgen Vollmer schrieb:
Es macht einen Unterschied ob man: find . -print0 -iname "*.exe" oder find . -iname "*.exe" -print0 schreibt. Es muß am Ende stehen. Steht es am Anfang, dann wird alles ausgegeben. Warum das so ist kann ich nicht sagen (bug? GNU find Version 4.2.28)
Feature. Man denke an Konstruktionen wie:
find . -print -iname '*.txt' -exec md5sum {} \; find . -print -iname '*.txt' -exec sh -xc "ls -b '{}' >&2" -- sh \;
die ansonsten nicht möglich wären.
wieso? Ich hatte den Eindruck, daß wenn -print vorne steht, daß nachfolgen -name keine Rolle mehr spielen.
Aber das -iname spielt eine Rolle für nachfolgende "Actions", hier das 'exec'. Probier's mit der md5sum-Variante: Ausgeben werden alle Dateien, md5-Summen werden aber nur von *.txt Dateien generiert.
IMO steht das auch irgendwie in der manpage, aber wohl mehr oder weniger nur implizit...
hab' auf den ersten Blick nichts gefunden.
Zumindest teilweise implizit in der Beschreibung von EXPRESSION.
Ja, ist wüst.
-dnh
Hi,
wenn nicht explizit anders angegeben, werden die Anweisungen mit _und_ verknüpft, im Klartext: die zweite Anweisung wird nur ausgeführt, wenn die erste ein true zurückgab. Und so die folgenden.
Wenn Du vorne "-print" hast, wird erst "-print" ausgeführt -und ist true, d.h. es wird angezeigt und gleichzeitig die nächste Anweisung ausgeführt... andersrum: wenn vorne -name "*.exe" steht werden nur die an die nächste Anweisung übergeben, die das erfüllen...
Man kann das ändern, indem man die Teile mit -o (exklusives oder) verknüpft. Eigentlich ist die manpage unter OPERATORS hier recht eindeutig...
ach jetzt wird's klarer. Das Urprungsproblem (es werden alle Dateien verarbeitet) tritt dann im Zusammenhang mit xargs auf. find ... -print -name "*.exe" | xargs cmd ==> alle gefundenen Namen werden an cmd übergeben, da xargs ja die Ausgabe (-print) erzeugt. -name liefert zwar für manche Dateien "false", aber das "juckt" xargs nicht find ... -print -name "*.exe" -exec cmd {} \; ==> es werden wieder alle Dateien ausgegeben (-print) aber da -name für manche Dateien fehlschlägt, wird für diese Dateien -exec nicht mehr ausgeführt. Man lernt nie aus. Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer