我知道 find 命令的用途,但我不知道括号的用途。请解释一下。
答案1
这是一项功能find
,可让您将不同的测试组合在一起。例如:
find . \( -name foo -or -name bar -o -name baz \) -size +1M
括号需要转义(\(
and\)
而不是(
and)
),因为括号是 shell 的特殊字符(它们用于在子壳层),因此它们需要进行转义才能被传递给find
shell 而不被其“吃掉”。
上述命令将查找名称为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
那里有两个名为 的文件foo
,但只有一个文件大小 >1M。 有两个文件大小 >1M,但只有一个文件名为foo
、bar
或baz
。 因此,我预计上述命令只会返回dir2/foo
,事实上确实如此:
$ find . \( -name foo -or -name bar -o -name baz \) -size +1M
./dir2/foo
好的,但是如果我不使用括号来运行它会怎么样?
$ find . -name foo -or -name bar -o -name baz -size +1M
./dir2/foo
./dir1/bar
./dir1/foo
它找到所有名为的文件foo
、所有名为的文件bar
和所有名为的文件bar
大小 > 1M。因此,即使大小 < 1M,也会返回和bar
。foo
dir1
因此,括号对于编写find
组合不同测试集的命令非常有用。当与 find 的-or
、-and
和-not
运算符结合使用时,它将成为一种非常强大的工具。
我无法判断它们在您的示例中做了什么,因为您实际上并没有给出一个有效的命令作为示例。这取决于具体情况pattern
。如果您真的在使用find . -ls
,然后在括号中使用另一组测试,那么它们什么也不做,因为find . -ls
已经匹配并列出了所有文件和目录。