我尝试了以下命令来chmod文件夹中的许多图像......
chown -R apache:apache *
但我得到了以下错误
-bash: /usr/bin: Argument list too long
然后我试了......
ls | xargs chown -R apache:apache *
然后得到以下消息......
-bash: /usr/bin/xargs: Argument list too long
有没有人有办法做到这一点?我很难过:(
非常感谢
威廉
答案 0 :(得分:8)
在*
之后省略xargs chown
,因为它会尝试将所有文件名列表两次放入脚本中。
尝试
ls | xargs chown -R apache:apache
为了避免文件名中的空格和换行符问题,我建议
find . -maxdepth 1 -not -name "." -print0 | xargs --null chown -R apache:apache
答案 1 :(得分:0)
这可能有效:
find . -maxdepth 1 -not -name -exec chown -R apache:apache {} \;
答案 2 :(得分:0)
您只需将当前目录传递到chown -R
:
chown -R apache:apache .
一个不正确的情况是,如果您希望所有文件和子目录(而不是当前目录和其中的.dotfiles)都拥有新的所有者。该答案的其余部分将更详细地说明针对该场景的方法,但是如果不需要,可以在这里停止阅读。
如果您具有root
或同等特权,则可以接受没有-R
的原始所有者的清理;或者您可以修复xargs
来避免pesky, buggy ls
并从OP的尝试中排除不正确的最终*
参数:
printf '%s\0' * | xargs -r0 chmod -R apache:apache
请注意,GNU扩展使用空字节作为分隔符。如果您的-0
中没有xargs
,则可以恢复为find
,如在较早的答案中已经建议的那样。
find . -maxdepth 1 -name '*' -exec chmod -R apache:apache {} +
如果您的find
不了解-exec ... {} +
,请尝试-exec ... {} \;
。