如何在find命令中使用-exec选项

我想用手来解决一些问题。

顺便说一下,我在Ubuntu 12.04中输入以下命令来构建compiz

 find /opt/compiz-built/share/gconf/schemas -exec gconftool-2 --install-schema-file={}; 

我在http://www.brazzi64.net/blog/building-compiz-from-source-in-ubuntu-12-04/上提到了这个命令

并显示以下消息。

如何在find命令中使用-exec选项,我想这是我的错误。

你快到了。 你需要一个\; 最后让我们知道命令的结尾在哪里。

 find /opt/compiz-built/share/gconf/schemas -exec gconftool-2 --install-schema-file={} \; 

对于一次可以获取多个参数的命令(例如,如果您只想stat每个文件名),可以使用\+代替。 这将构建一个复合参数,它可以更快地执行,因为它不会为每个文件分叉:

 find . -exec stat {} \+ 

但这不适用于你的例子。


只是一个测试工具来突出显示引号不是必需的:

 $ mkdir 1 2 1\ 2 # makes three directories $ touch {1,2}/single # puts a file in each of the two singles $ touch 1\ 2/COMBO # puts a file in the dir with a space $ find -type d -exec ls {} \; 1 1 2 2 single single COMBO 

如果它没有为我们处理报价,我们会看到这而不是COMBO:

 1: correct 2: correct 

您可以使用此命令。

 find /opt/compiz-built/share/gconf/schemas -exec gconftool-2 --install-schema-file '{}' ';' 

根据find命令手册($ man find)。 有一些动作可以在find命令中预定义,例如delete,ls。

除了预定义的操作,我们还可以调用任意命令。 执行此操作的传统方法是使用-exec操作。 此操作的工作方式如下:

 -exec command {} ; 

其中command是命令的名称,{}是当前路径名的符号表示,分号是表示命令结束的必需分隔符。

同样,由于括号和分号字符对shell具有特殊含义,因此必须引用或转义它们