使用这组命令时,{}
和 \;
字符用于什么?
find . -name '*.clj' -exec grep -r resources {} \;
请查看man find (特别是关于 -exec
的部分)。
当使用-exec
在找到的每个文件上运行命令时,{}
会被替换为找到的每个文件的名称,并且该命令以\;
结束。
在您的示例中,所有在当前目录(.
)下找到的匹配名称*.clj
的文件将对它们运行grep -r resources
命令(如果该字符串存在于这些文件中,则查找字符串resources
)。
实际上有点多余,因为-r
用于递归地搜索子目录,而这正是find
已经在执行的操作。
man find
,因为它看起来不像是find
命令的一部分,就像一个shell扩展、管道或其他重定向操作符也不是它旁边找到的命令的一部分一样。我以为它是一些shell语法魔法,如果不知道它的名称,我就无法识别它。 - temporary_user_namefind . -name *.clj | xargs grep -r resources
find
中,字符串{}
将被当前文件的路径名替换。find
实用程序调用的shell命令。;
是shell使用的特殊字符之一(列表运算符)。字符串“{}”将被当前处理的文件替换。转义的分号终止了-exec选项的命令参数。