這是我檢查的內容:
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 ... {} \;


