这是一个功能find,可让您将不同的测试组合在一起。例如:
find . \( -name foo -or -name bar -o -name baz \) -size +1M
Run Code Online (Sandbox Code Playgroud)
括号需要转义(\(而\)不是(and )),因为括号是 shell 的特殊字符(它们用于在subshells 中运行命令),因此需要将它们转义以便传递给find而不是被“吃掉”贝壳。
上面的命令会发现其名称是任何的任何文件foo,bar或baz 和其大小为> 1M。现在,以这个目录结构为例:
$ ls -lh *
dir1:
total 2.0M
-rw-r--r-- 1 terdon terdon 1.0M Mar 7 01:24 bar
-rw-r--r-- 1 terdon terdon 1.0M Mar 7 01:24 foo
dir2:
total 4.0M
-rw-r--r-- 1 terdon terdon 2.0M Mar 7 01:24 file
-rw-r--r-- 1 terdon terdon 2.0M Mar 7 01:24 foo
Run Code Online (Sandbox Code Playgroud)
那里有两个名为 的文件foo,但只有一个大于 1M。有2个文件是> 1M的大小,但只有一个被命名为foo,bar或baz。因此,我希望上面的命令只会返回dir2/foo,事实上,它确实如此:
$ find . \( -name foo -or -name bar -o -name baz \) -size +1M
./dir2/foo
Run Code Online (Sandbox Code Playgroud)
好的,但是如果我不带括号运行它呢?
$ find . -name foo -or -name bar -o -name baz -size +1M
./dir2/foo
./dir1/bar
./dir1/foo
Run Code Online (Sandbox Code Playgroud)
这会为我找到所有已命名的foo文件bar、所有已命名bar 的文件以及所有已命名且大小大于 1M 的文件。因此,即使它们的大小小于 1M ,也会返回bar和fooin dir1。
因此,括号对于制作find组合不同测试集的命令非常有用。当与 find 的-or,-and和-not运算符结合使用时,这将成为一个非常强大的工具。
他们在你的例子中做了什么我不知道,因为你实际上并没有给出一个工作命令作为例子。这将取决于是什么pattern。如果您真的在使用find . -ls,然后在括号中使用另一组测试,那么它们什么都不做,因为find . -ls已经匹配并列出了所有文件和目录。