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