17

有了这组命令,{}\;字符是干什么用的?

find . -name '*.clj' -exec grep -r resources {} \;
4

5 回答 5

32

man find。(特别是关于 的部分-exec

当用于对找到的每个文件-exec运行命令时,将{}替换为找到的每个文件的名称,并且命令由\;

在您的示例中,在当前目录 ( .) 下找到的所有文件,匹配名称*.clj将在它们上运行命令(如果字符串存在于每个文件中,则grep -r resources查找该字符串)。resources

它实际上有点多余,因为-r它是用于递归搜索子目录,这find就是已经在做的事情。

于 2009-01-15T14:59:10.957 回答
3

在 find 中,-exec 参数抓取其余参数直到 ; (分号)必须被转义,因此 \;。在此范围内,{} 被替换为正在检查的文件名。

于 2009-01-15T14:59:40.783 回答
2

考虑这个我觉得更容易理解的替代命令:

find . -name *.clj | xargs grep -r resources 
于 2009-01-16T01:25:49.817 回答
1

字符串“{}”将替换为当前正在处理的文件。转义的分号终止 -exec 选项的命令参数。

于 2009-01-15T15:00:55.103 回答
1

{}in的字符串find替换为当前文件的路径名。

分号用于终止find实用程序调用的 shell 命令。

它需要被转义或引用,因此它不会被 shell 解释,因为;它是 shell 使用的特殊字符之一(列表运算符)。

另请参阅:为什么 find 命令的 -exec 选项需要反斜杠和分号?

于 2014-10-18T12:27:03.183 回答