find命令似乎与其他Unix命令不同。
为什么在以下命令的末尾有空的花括号和后向闪光?
find * -perm 777 -exec chmod 770 {} \;
我找到了大括号的一个原因,但没有找到后向闪光的原因。
大括号显然是路径
与-exec相同,除了``{}'' 替换为尽可能多的路径名 可能每次调用 效用
答案 0 :(得分:16)
-exec命令后面可以跟随任意数量的参数,这些参数构成了为每个找到的文件执行的命令。需要有一些方法来确定最后一个参数。这是什么 \;确实。请注意,在-exec开关后可能会出现其他内容:
find euler/ -iname "*.c*" -exec echo {} \; -or -iname "*.py" -exec echo {} \;
(这会找到euler目录中的所有c文件和python文件。)
exec不需要将完整命令放在引号内的原因是,在大多数情况下,这需要在命令中转义大量引号。
答案 1 :(得分:6)
{}
中的字符串find
将替换为当前文件的路径名。
分号用于终止find
实用程序调用的shell命令。
它需要被转义或引用,因此它不会被shell解释,因为;
是shell(列表运算符)使用的特殊字符之一。
另请参阅:Why are the backslash and semicolon required with the find command's -exec option?
答案 2 :(得分:3)
需要(转义)分号,以便“find”可以告诉exec'd程序的参数结束(如果有的话)和“find”的其他参数开始。
答案 3 :(得分:2)
我建议您改为
find . -perm 777 -print0 | xargs -0 chmod 770
“xargs”表示获取查找结果并一次将其提供给以下命令。