以下 -exec 命令有什么错误

以下 -exec 命令有什么错误

我在以下命令中遇到错误

cd /opt/lampp/htdocs/EspoCRM-2.5.2 && find data -type d -exec chmod 775 {}

错误:

find: missing argument to `-exec'

答案1

您需要将您的 exec 标记为已完成,\; 您的命令如下所示:

cd /opt/lampp/htdocs/EspoCRM-2.5.2 && find data -type d -exec chmod 775 {} \;

顺便说一句:你不需要 cd 进入目录。find 可以获取要搜索的完整路径。因此

find /opt/lampp/htdocs/EspoCRM-2.5.2/data/ -type d -exec chmod 775 {} \;

也应作为查找调用。

答案2

正如其他人所说,find-exec需要终止。但是我实际上建议使用+而不是\;。这仅适用于某些命令,但使用+将构建和运行更高效的命令。

例如,如果目录中有三个文件( ab和),并且您运行它将执行:cfind -exec echo {} \;

echo a
echo b
echo c

但是,如果您使用,find -exec echo {} +它将动态选择环境支持的尽可能多的参数(有一个限制),并将xargs它们链接在一起......所以实际运行的是:

echo a b c

正如我之前所说,这只有当您的命令一次支持多个文件时才会起作用。chmod就是其中之一。您可以通过查看man chmod页面来判断:

SYNOPSIS
       chmod [OPTION]... MODE[,MODE]... FILE...
       chmod [OPTION]... OCTAL-MODE FILE...
       chmod [OPTION]... --reference=RFILE FILE...

省略号FILE...表示它可以容纳多个文件。

所以,是的,将它们全部链接在一起意味着我们运行更少的实例,chmod这是好的,因为分叉出新命令的开销相当大(对于这样的小操作)。

总之,使用+更快。

答案3

您需要以以下命令结束命令\;

尝试这个:

cd /opt/lampp/htdocs/EspoCRM-2.5.2 && find data -type d -exec chmod 775 {} \;

相关内容