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

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

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

ls @(name1|name2)

有没有办法使用 来做到这一点find

我天真的实现:

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

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

答案1

您可以使用-ofor 逻辑OR.但请注意,所有find谓词都有逻辑值,因此您通常需要使用OR括号将 ed 内容分组在一起。由于括号对 shell 也有意义,因此您还需要转义它们:

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

答案2

要回答您的问题,您可以使用-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

相关内容