find 命令似乎与其他 Unix 命令不同。
为什么在以下命令的末尾会有空的大括号和向后闪烁?
find * -perm 777 -exec chmod 770 {} \;
我找到了大括号的一个原因,但没有找到向后闪光的原因。
大括号显然是用于路径
与 -exec 相同,除了 ``{}'' 被替换为每次调用实用程序时尽可能多的路径名
-exec 命令后面可以跟任意数量的参数,这些参数构成要为找到的每个文件执行的命令。需要有某种方法来识别最后一个参数。这是什么 \; 做。请注意,在 -exec 开关之后可能会出现其他内容:
find euler/ -iname "*.c*" -exec echo {} \; -or -iname "*.py" -exec echo {} \;
(这会在 euler 目录中找到所有 c 文件和 python 文件。)
exec 不需要完整命令包含在引号内的原因是,在大多数情况下,这将需要转义命令内的大量引号。
{}
in的字符串find
替换为当前文件的路径名。
分号用于终止find
实用程序调用的 shell 命令。
它需要被转义或引用,因此它不会被 shell 解释,因为;
它是 shell 使用的特殊字符之一(列表运算符)。
需要(转义)分号,以便“find”可以告诉执行程序的参数在哪里结束(如果有的话)以及“find”的附加参数开始。
我建议您改为这样做
find . -perm 777 -print0 | xargs -0 chmod 770
“xargs”表示获取查找结果并一次将 20 个输入到以下命令。