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

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

必要な動作を得るには、次のものが必要です。

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

関連情報