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