Folgendes habe ich überprüft:
find mydir -maxdepth 2 -name .project -or -name .classpath
gibt Ausgabe:
mydir/.project
mydir/.classpath
In der Zwischenzeit
find mydir -maxdepth 2 -name .project -or -name .classpath -exec echo {} \;
gibt Ausgabe:
mydir/.classpath
also wird nur 1 gefundener Artikel aufgelistet, warum?
xargs funktioniert wie erwartet:
find mydir -maxdepth 2 -name .project -or -name .classpath | xargs -I {} echo {};
Drucke:
mydir/.project
mydir/.classpath
Übersehe ich etwas bezüglich -exec?
Antwort1
Ein findAusdruck ist im Grunde eine Liste von Prädikaten (Boolesche Bedingungen). In fast allen Booleschen Kontexten, einschließlich findAusdrücken, hat der ANDOperator Vorrang vor OR. Wenn ich einige Klammern hinzufüge, um die Vorrangregeln explizit zu veranschaulichen, findist Ihr zweiter Ausdruck logisch äquivalent zu
( -name .project ) OR ( -name .classpath AND -exec echo)
Um das gewünschte Verhalten zu erreichen, brauchen Sie
find mydir -maxdepth 2 \( -name .project -o -name .classpath \) -exec ... {} \;


