无法理解命令find的语法

时间:2009-03-22 00:35:43

标签: find

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

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

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

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

大括号显然是路径

  

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

4 个答案:

答案 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”表示获取查找结果并一次将其提供给以下命令。