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

Jef*_*ror 17 ls find patterns

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

ls @(name1|name2)
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点find

我天真的实现:

find . -maxdepth 1 -name @("name1"|"name2") 
Run Code Online (Sandbox Code Playgroud)

不起作用(它只是不输出任何内容)

lcd*_*047 23

您可以-o用于逻辑OR. 但是要注意所有find谓词都有逻辑值,所以你通常需要OR用括号将ed 的东西组合在一起。由于括号对 shell 也有意义,因此您还需要对它们进行转义:

find /some/dir -maxdepth 1 \( -name '*.c' -o -name '*.h' \) -print
Run Code Online (Sandbox Code Playgroud)


Ark*_*zyk 9

要回答您的问题,您可以使用-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.
Run Code Online (Sandbox Code Playgroud)

像这样:

$ find . -maxdepth 1 -name "name1" -o -name "name2"
./name1
./name2
Run Code Online (Sandbox Code Playgroud)