如何在查找中使用逻辑或?


12

在bash shell中ls可以通过使用逻辑OR功能(当然我也可以这样做,ls name1 name2但是我的真实示例更加复杂):

ls @(name1|name2)

有没有办法做到这一点find

我天真的实现:

find . -maxdepth 1 -name @("name1"|"name2") 

不起作用(它什么也不输出)


4
您是否阅读OPERATORS了手册find页的这一部分?
steeldriver

Answers:


19

您可以使用-o逻辑OR。但是请注意,所有find谓词都具有逻辑值,因此通常需要将ORed内容与parens 分组在一起。而且由于parens对shell也有含义,因此您还需要转义它们:

find /some/dir -maxdepth 1 \( -name '*.c' -o -name '*.h' \) -print

5

要回答您的问题,可以使用以下-o选项:

   expr1 -o expr2
          Or; expr2 is not evaluated if expr1 is true.

   expr1 -or expr2
          Same as expr1 -o expr2, but not POSIX compliant.

像这样:

$ find . -maxdepth 1 -name "name1" -o -name "name2"
./name1
./name2
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.