如何在查找中结合2名条件?


94

我想搜索不符合2个-name条件的文件。我可以这样做:

find /media/d/ -type f -size +50M ! -name "*deb" ! -name "*vmdk"

这将产生适当的结果,但是我可以以某种方式加入这两个条件吗?

Answers:



145

是的你可以:

find /media/d/ -type f -size +50M ! \( -name "*deb" -o -name "*vmdk" \)

从说明POSIX规范

表达:否定一次; 一元NOT运算符。

expression):如果expression为true,则为true。

expression -o expression:基元的替代;OR运算符。如果第一个表达式为true,则不对第二个表达式求值。

请注意,括号(无论是打开还是关闭)都以反斜杠(\)作为前缀,以防止被外壳程序评估。


2
如果您要-execfind结果进行任何操作或其他操作,请记住\( \)在整个条件上加上括号,否则-exec仅适用于最后使用的-or条件。要对所有这些对象进行处理,请在它们后面find \( <criterion> -o <criterion> \) -exec <command>
加上

25

您已经接近解决方案:

find /media/d/ -type f -size +50M -and ! -name "*deb" -and ! -name "*vmdk"

您可以按任意顺序组合以下逻辑运算符:

-a   -and      - operator AND
-o   -or       - operator OR
!              - operator NOT

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.