简单的unix命令,什么是{}和\;对于

问题描述:

使用这组命令,什么是{}和\;字符为?简单的unix命令,什么是{}和;对于

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

注意,不需要的 “grep -r” 除非这些.clj文件夹。 find是默认递归的,所以grep不一定是。 (grep会被送到每个文件中。)你可能也想使用xargs,因为用你当前的命令你不会知道你从哪个文件获得命中。 – PEZ 2009-01-15 15:12:26

请参阅man find。 (讲究-exec的部分)

当使用-exec运行每个发现的文件的命令时,{}被替换为每个文件中找到的名称,并命令由\;

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

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

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

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

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

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

但是,它有不正确地处理嵌入空间和类似文件的主要缺陷。 – jlliagre 2014-10-18 12:36:03

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

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

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

参见:Why are the backslash and semicolon required with the find command's -exec option?