xargs + chmod - 未找到文件或目录

xargs + chmod - 未找到文件或目录

我正在尝试递归地更改项目中所有文件和目录的权限。

我找到了一个在 magento 论坛上发帖说我可以使用这些命令:

find ./ -type f | xargs chmod 644
find ./ -type d | xargs chmod 755
chmod -Rf 777 var
chmod -Rf 777 media

它工作了find ./ -type d | xargs chmod 755.

该命令find ./ -type f返回了很多文件,但chmod: access to 'fileXY.html' not possible: file or directory not found如果我执行find ./ -type f | xargs chmod 644.

我该如何解决这个问题?

PS:我知道他建议对我的var和media文件夹使用777权限,这是一个安全风险,但是我们还应该使用什么呢?

答案1

我猜您遇到的文件名称中包含导致xargs它们分开的字符,例如空白。要解决这个问题,假设您使用的是find且支持适当选项的版本xargs(源自 GNU 变体,并且不是由 POSIX 指定),您应该使用以下命令:

find . -type f -print0 | xargs -0 chmod 644
find . -type d -print0 | xargs -0 chmod 755

或者更好的是,

chmod -R a-x,a=rX,u+w .

其优点是流程较短、仅使用一个流程、并且支持POSIXchmod(看这个答案了解详情)。

您的问题media相当var广泛,如果您对具体答案感兴趣,我建议您将其作为一个单独的问题提出,并提供有关您对目录的使用的更多信息。

答案2

怎么样:

find ./ -type d -exec chmod 755 {} +

这是规范的便携式解决方案,甚至可以处理文件名中的换行符。

相关内容