11

find 命令似乎与其他 Unix 命令不同。

为什么在以下命令的末尾会有空的大括号和向后闪烁?

find * -perm 777 -exec chmod 770 {} \;

我找到了大括号的一个原因,但没有找到向后闪光的原因。

大括号显然是用于路径

与 -exec 相同,除了 ``{}'' 被替换为每次调用实用程序时尽可能多的路径名

4

4 回答 4

16

-exec 命令后面可以跟任意数量的参数,这些参数构成要为找到的每个文件执行的命令。需要有某种方法来识别最后一个参数。这是什么 \; 做。请注意,在 -exec 开关之后可能会出现其他内容:

find euler/ -iname "*.c*" -exec echo {} \; -or -iname "*.py" -exec echo {} \;

(这会在 euler 目录中找到所有 c 文件和 python 文件。)

exec 不需要完整命令包含在引号内的原因是,在大多数情况下,这将需要转义命令内的大量引号。

于 2009-03-22T00:42:53.603 回答
7

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

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

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

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

于 2014-10-18T12:25:00.810 回答
3

需要(转义)分号,以便“find”可以告诉执行程序的参数在哪里结束(如果有的话)以及“find”的附加参数开始。

于 2009-03-22T00:44:19.807 回答
1

我建议您改为这样做

find . -perm 777 -print0 | xargs -0 chmod 770

“xargs”表示获取查找结果并一次将 20 个输入到以下命令。

于 2009-03-22T00:44:27.997 回答