![CentOS 7 -> 发现:“-exec” 缺少参数](https://linux22.com/image/1597014/CentOS%207%20-%3E%20%E5%8F%91%E7%8E%B0%EF%BC%9A%E2%80%9C-exec%E2%80%9D%20%E7%BC%BA%E5%B0%91%E5%8F%82%E6%95%B0.png)
免责声明:我完全是 Linux 业余爱好者。嗨,我目前正在 CentOS 7 上设置 PHPIPAM 服务器。我遵循以下指南:https://hostadvice.com/how-to/how-to-install-phpipam-on-centos-7/,它告诉我运行命令:“
find . -type f -exec chmod 0644 {} ;
当我这样做时,出现以下消息:
发现:“-exec”缺少参数。
出现。我该怎么做才能使命令起作用?
答案1
通常,它;
充当命令之间的分隔符。但是,对于find -exec
它,需要将其作为命令本身的实际参数提供(以指示 -exec 选项的结束位置)。为此,需要将其括起来或转义:
-exec ..... \;
-exec ..... ";"
-exec ..... ';'
答案2
当我这样做时,出现了这样的信息:“find:缺少“-exec”的参数。”
find . -type -exec chmod 0644 {} ;
您在行尾的\
the 之前缺少 a (在您引用的链接中缺少该 a )。;
此外,您还没有提供论据-type
。
你的命令应该是:
find . -type f -exec chmod 0644 {} \;
-type c
文件类型为 c ,如下所示:
b
块(缓冲)特殊
c
字符(无缓冲)特殊
d
目录
p
命名管道(FIFO)
f
常规文件
l
符号链接;如果 -L 选项或 -follow 选项有效,则这永远不会成立,除非符号链接已损坏。如果要在 -L 有效时搜索符号链接,请使用-xtype.
s
插座
D
门(Solaris)
答案3
其他答案解释了问题发生的原因,但还有另一种解决方案。您可以使用+
而不是\;
,这样您就不必担心转义;
。对于像chmod
大量文件这样的操作,这也可能会更快一些。您可以像这样运行它:
find . -type f -exec chmod 0644 {} +
不过,它们并不完全相同。使用+
命令find
将多个文件作为单独的参数传递给 的单个调用chmod
。许多程序可以很好地处理这个问题,但有些程序不能。如果您要传递给的程序-exec
需要一次只接受 1 个文件参数,那么您必须改用\;
。