7

我已尝试使用以下命令对文件夹中的许多图像进行 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 

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

非常感谢

威廉

4

3 回答 3

14

省略*后面,xargs chown因为它会尝试两次添加所有文件名的列表(一次 from ls,然后再次 from *)。

尝试

chown -R apache:apache .

这会更改当前文件夹 ( .) 及其中的所有内容,并且始终有效。如果您需要文件夹本身的不同权限,请将它们写下来并在之后使用chown without -R恢复它们。

如果您真的只想处理文件夹的内容,这将起作用:

find . -maxdepth 1 -not -name "." -print0 | xargs --null chown -R apache:apache
于 2013-06-19T10:03:36.617 回答
1

您可以简单地将当前目录传递给chown -R

chown -R apache:apache .

这是不正确的一个极端情况是,如果您希望所有文件和子目录(而不是当前目录和其中的 .dotfiles)拥有新所有者。该答案的其余部分更详细地解释了该场景的方法,但如果您不需要,可以在此处停止阅读。

如果您具有root或具有同等权限,则可能可以接受对原始所有者进行清理-R;或者您可以修复xargs以避免讨厌的错误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 ... {} \;

于 2019-05-18T08:35:25.707 回答
0

这可能有效:

find . -maxdepth 1 -not -name -exec chown -R apache:apache {} \;
于 2017-08-24T21:06:14.933 回答