有了这组命令,{}
和\;
字符是干什么用的?
find . -name '*.clj' -exec grep -r resources {} \;
见man find。(特别是关于 的部分-exec
)
当用于对找到的每个文件-exec
运行命令时,将{}
替换为找到的每个文件的名称,并且命令由\;
在您的示例中,在当前目录 ( .
) 下找到的所有文件,匹配名称*.clj
将在它们上运行命令(如果字符串存在于每个文件中,则grep -r resources
查找该字符串)。resources
它实际上有点多余,因为-r
它是用于递归搜索子目录,这find
就是已经在做的事情。
在 find 中,-exec 参数抓取其余参数直到 ; (分号)必须被转义,因此 \;。在此范围内,{} 被替换为正在检查的文件名。
考虑这个我觉得更容易理解的替代命令:
find . -name *.clj | xargs grep -r resources
字符串“{}”将替换为当前正在处理的文件。转义的分号终止 -exec 选项的命令参数。
{}
in的字符串find
替换为当前文件的路径名。
分号用于终止find
实用程序调用的 shell 命令。
它需要被转义或引用,因此它不会被 shell 解释,因为;
它是 shell 使用的特殊字符之一(列表运算符)。