Warum wird -exec von find nur bei einem Ergebnis ausgeführt?

Warum wird -exec von find nur bei einem Ergebnis ausgeführt?

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 ... {} \;

verwandte Informationen