為什麼 find 的 -exec 只執行一個結果?

為什麼 find 的 -exec 只執行一個結果?

這是我檢查的內容:

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。如果我添加一些括號來明確說明優先規則,那麼您的第二個find表達式在邏輯上相當於

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

為了獲得您想要的行為,您需要

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

相關內容