gnu find 的手册页指出:
请注意,当隐式指定(例如,两个测试之间没有显式运算符)或显式指定时,-a 的优先级高于 -o。这意味着
find . -name afile -o -name bfile -print
永远不会打印文件。
我猜上面的表达式相当于:
find . -name afile -o -name bfile -a -print
我的问题是,这个表达式是如何工作的?为什么afile
永远不会被打印?
答案1
-and
/运算符-a
是逻辑运算符和操作员。不必指定它们,因为它们是由两个表达式并置暗示的。
是的,它不会在afile
您使用时打印find . -name afile -o -name bfile -a -print
和运算符的优先级高于或者操作员-or
/ -o
。如果您想afile
打印,您有两种选择:
第一个选项:
正如 @malo 提到的,通过运行find . \( -name afile -o -name bfile \) -a -print
您可以afile
打印出结果,因为括号在 GNU 和 BSD 版本中的 Find 命令中具有最高优先级。
第二种选择:
通过不传递-print
选项。所以会是这样find . -name afile -o -name bfile
,原因是,没有什么优先级比 更高-o
。
答案2
您应该使用括号,因为它们的优先级高于-a
:
find . \( -name afile -o -name bfile \) -a -print