这是我检查的内容:
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 ... {} \;