使用这组命令,{}和\是什么?字符为?
find . -name '*.clj' -exec grep -r resources {} \;
答案 0 :(得分:27)
见man find。 (特别是关于-exec
)的部分
使用-exec
对找到的每个文件运行命令时,{}
将替换为找到的每个文件的名称,命令由\;
终止
在您的示例中,在当前目录(.
)下找到的与名称*.clj
匹配的所有文件都将运行命令grep -r resources
(以查找字符串{{1如果它存在于每个文件中)。
它实际上有点多余,因为resources
用于递归搜索子目录,而-r
已经在做什么。
答案 1 :(得分:2)
在find中,-exec参数获取其余参数直到; (分号)必须逃脱,因此\;。在此范围内,{}将替换为正在检查的文件名。
答案 2 :(得分:2)
考虑这个替代命令,我觉得这个命令更容易理解:
find . -name *.clj | xargs grep -r resources
答案 3 :(得分:1)
字符串“{}”将被正在处理的当前文件替换。转义的分号终止-exec选项的命令参数。
答案 4 :(得分:0)
{}
中的字符串find
将替换为当前文件的路径名。
分号用于终止find
实用程序调用的shell命令。
它需要被转义或引用,因此它不会被shell解释,因为;
是shell(列表运算符)使用的特殊字符之一。
另请参阅:Why are the backslash and semicolon required with the find command's -exec option?