在 bash shell 中ls
可以通过以下方式使用逻辑 OR 功能(当然我也可以这样做,ls name1 name2
但我的真实示例更复杂):
ls @(name1|name2)
有没有办法使用 来做到这一点find
?
我天真的实现:
find . -maxdepth 1 -name @("name1"|"name2")
不起作用(它什么也不输出)
答案1
您可以使用-o
for 逻辑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