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

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

我想compiz用我的来解决一些问题

顺便说一下,我compiz在 Ubuntu 12.04 中输入以下命令从源代码进行构建

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/

并显示以下消息。

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

答案1

您快完成了。您需要\;在末尾添加一个,以便 find 知道命令的结尾在哪里。

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

答案2

你可以使用这个命令。

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

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

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

-exec command {} ;

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

再次,由于括号和分号字符对 shell 有特殊含义,因此必须用引号或转义

相关内容