Oli*_*nde 680 permissions chmod
如何 chmod 755 所有目录但没有文件(递归)?
相反,如何仅 chmod 文件(递归)但没有目录?
nik*_*nik 947
递归地赋予目录读取和执行权限:
find /path/to/base/dir -type d -exec chmod 755 {} +
Run Code Online (Sandbox Code Playgroud)
要递归地授予文件读取权限:
find /path/to/base/dir -type f -exec chmod 644 {} +
Run Code Online (Sandbox Code Playgroud)
或者,如果有很多对象要处理:
chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
Run Code Online (Sandbox Code Playgroud)
或者,为了减少chmod产卵:
find /path/to/base/dir -type d -print0 | xargs -0 chmod 755
find /path/to/base/dir -type f -print0 | xargs -0 chmod 644
Run Code Online (Sandbox Code Playgroud)
bob*_*nce 336
这种事情的一个常见原因是将目录设置为 755,而将文件设置为 644。在这种情况下,有一种比 nik 的find示例稍微快一点的方法:
chmod -R u+rwX,go+rX,go-w /path
Run Code Online (Sandbox Code Playgroud)
意义:
-R = 递归;u+rwX = 用户可以读、写和执行;go+rX = group 和其他人可以读取和执行;go-w =组和其他人不能写这里要注意的重要一点是大写X与小写的作用不同x。在手册中,我们可以阅读:
如果文件是目录,则执行/搜索位或任何执行/搜索位设置为原始(未修改)模式。
换句话说,文件上的 chmod u+X 不会设置执行位;并且 g+X 只会在已经为用户设置的情况下设置它。
小智 16
如果要确保文件设置为 644 并且路径中有文件具有执行标志,则必须先删除执行标志。+X 不会从已经拥有它的文件中删除执行标志。
例子:
chmod -R ugo-x,u+rwX,go+rX,go-w path
Run Code Online (Sandbox Code Playgroud)
更新:这似乎失败了,因为第一次更改 (ugo-x) 使目录无法执行,因此它下面的所有文件都没有更改。
要递归地授予目录读取和执行权限:
find /path/to/base/dir -type d -exec chmod 755 {} \;
Run Code Online (Sandbox Code Playgroud)
要递归地授予文件读取权限:
find /path/to/base/dir -type f -exec chmod 644 {} \;
Run Code Online (Sandbox Code Playgroud)
迟到总比不让我升级尼克的答案的正确性更好。我的解决方案速度较慢,但它适用于任意数量的文件,文件名中包含任何符号,并且您可以正常使用 sudo 运行它(但请注意,它可能会使用 sudo 发现不同的文件)。
| 归档时间: |
|
| 查看次数: |
523161 次 |
| 最近记录: |