我在以下命令中遇到错误
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
需要终止。但是我实际上建议使用+
而不是\;
。这仅适用于某些命令,但使用+
将构建和运行更高效的命令。
例如,如果目录中有三个文件( a
、b
和),并且您运行它将执行:c
find -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 {} \;