使用此组命令,什么是{}和\;为字符?

find . -name '*.clj' -exec grep -r resources {} \;
有帮助吗?

解决方案

请参阅人发现。 (特别是约-exec的部分)

当使用-exec运行在每个找到的文件的命令时,{}被替换为每个文件的找到的名称,并且该命令被通过\;终止

在你的榜样,当前目录(.)下找到的所有文件,匹配名称*.clj将会对他们的命令grep -r resources运行(查找的字符串resources如果在每个这些文件的存在)。

这其实有些多余,因为-r是递归搜索子目录,而这正是find已经在做。

其他提示

在查找中,-exec参数抓住参数的其余部分向上TIL的; (分号),其具有进行转义,因此\ ;.在该跨度,{}被替换的文件名被检查。

考虑该备选命令,我发现更易于理解:

find . -name *.clj | xargs grep -r resources 

在字符串“{}”将被当前文件替换正在处理中。逸出的分号终止用于-exec选项的命令参数。

{}字符串find由当前文件的路径名所取代。

分号用于终止由find工具调用的外壳命令。

有需要转义,或引用,因此它不会受到壳来解释,因为;是由外壳所使用的特殊字符中的一个(列表运算符)。

参见:为什么反斜杠和分号与find命令的-exec选项的要求?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top