find の -exec が 1 つの結果に対してのみ実行されるのはなぜですか?

find の -exec が 1 つの結果に対してのみ実行されるのはなぜですか?

私が確認したのは次の通りです:

find mydir -maxdepth 2 -name .project -or -name .classpath

出力は次のようになります。

mydir/.project
mydir/.classpath

その間

find mydir -maxdepth 2 -name .project -or -name .classpath -exec echo {} \;

出力は次のようになります。

mydir/.classpath

見つかったアイテムが 1 つだけリストされているのはなぜですか?

xargs は期待通りに動作します:

find mydir -maxdepth 2 -name .project -or -name .classpath | xargs -I {} echo {};

プリント:

mydir/.project
mydir/.classpath

について何か見逃しているのでしょうか-exec?

答え1

式は基本的に述語(ブール条件)のリストです。式findを含むほぼすべてのブールコンテキストでは、演算子が より優先されます。優先順位のルールを明示的に示すために括弧を追加すると、2番目の式は論理的に次の式と同等になります。findANDORfind

( -name .project ) OR ( -name .classpath AND -exec echo)

望ましい行動を得るためには、

find mydir -maxdepth 2 \( -name .project -o -name .classpath \) -exec ... {} \;

関連情報