find -type d -exec chmod ... {} \; 能精准只改目录权限,因 -type d 仅匹配目录条目,自动排除文件、链接、设备等;后续 chmod 仅作用于这些目录本身,内部文件权限不受影响。

直接用 find -type d -exec chmod ... {} \; 就能精准只改目录权限,完全跳过所有普通文件、符号链接、设备文件等,内部文件的权限位一根毫毛都不会动。
核心原理很简单:-type d 是 find 的类型过滤器,它只匹配文件系统中类型为“目录”的条目(即 ls -l 显示开头是 d 的那些),自动排除 -f(普通文件)、-l(软链接)、-c/-b(设备)等其他类型。后续的 chmod 只作用于这些被选中的目录本身。
✅ 正确写法与常用场景
-
把
/var/www/html下所有子目录(含当前目录)设为 Web 标准目录权限(755):find /var/www/html -type d -exec chmod 755 {} \; -
仅修改当前目录及下级目录(不含任何文件),设为属主全权、组可进入、其他人无访问(750):
find . -type d -exec chmod 750 {} \; -
如果你希望同时把所有普通文件设为 644(只读写,不可执行),再补一条:
Linux Ai Server下载Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
find . -type f -exec chmod 644 {} \;
⚠️ 注意:这两条命令顺序无关,但必须分开执行——
-type d和-type f各司其职,互不干扰。
❌ 常见错误与风险点
错误写法:
find /path -exec chmod 755 {} \;
→ 缺少-type d,会把路径下所有东西(包括.php、.conf、.log等文件)全改成 755,导致脚本可执行、配置文件可写,严重安全隐患。混淆
-type d和-type f:
一旦写反,比如用-type f却想改目录,结果一条命都没改中,还误以为操作成功。误用
chmod -R替代find -type d:chmod -R 755 dir/会递归进每个子目录,并把里面所有文件也设成 755,彻底破坏文件权限模型。
? 进阶技巧:跳过特定目录不修改
比如不想动 cache/、logs/ 这类动态目录(避免权限被重置影响服务):
find /var/www/html -type d -not -path "/var/www/html/cache" -not -path "/var/www/html/logs" -exec chmod 755 {} \;-
-not -path必须写在-exec前面,且路径要完整匹配(支持通配符如*/cache/*,但需加引号)。 - 多个排除项重复写
-not -path即可,无需and或\;分隔。
? 小贴士:用大写 X 更安全(推荐用于 Web 目录)
如果你只是想“让所有目录可进入”,又怕不小心给某些脚本文件加了执行权,可用条件执行位 X:
find /var/www/html -type d -exec chmod u=rwX,g=rX,o=rX {} \;-
X(大写)只对目录或原本就有x的文件生效,普通.txt、.conf文件不会被加上x。 - 这比硬写
755更稳妥,尤其适合部署后统一加固。
不复杂但容易忽略。

















