列表太长,chmod递归

时间:2013-06-19 09:56:59

标签: linux chown

我尝试了以下命令来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 

有没有人有办法做到这一点?我很难过:(

非常感谢

威廉

3 个答案:

答案 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 ... {} \;