用 chmod -r a-x 可递归移除所有文件和子目录的执行权限,其中 a 表示所有用户,-x 表示仅移除执行位而不影响读写权限,比数字模式更安全;但会致使目录无法进入或列出内容,需谨慎使用。

直接用 chmod -R a-x 即可递归移除目录下所有文件和子目录的执行权限。
为什么是 a-x 而不是其他写法
这里的 a 表示 all(所有用户:属主、属组、其他人),-x 表示“移除执行权限”。它不会改动读、写权限,只精准去掉 x 位。相比用数字模式(如 644 或 664)更安全——因为数字模式会强制重置整组权限,容易误删本应保留的写权限或组读权限。
- 对普通文件:去掉
x后变成不可执行,但依然可读可写(如文本、配置文件) - 对目录:去掉
x意味着无法进入(cd)、无法ls列出内容——这点要特别注意 - 若只想处理文件、跳过目录,需配合
find,例如:find /path -type f -exec chmod a-x {} \;
常用组合与避坑提示
实际操作中常搭配选项增强可控性:
-
-v:显示每一步修改,便于确认范围,例如chmod -Rv a-x myproject/ -
-c:只输出真正发生变更的条目,减少干扰信息 - 慎用
755 → 644类数字替换:它会把目录也改成644,导致目录失去执行位(即不可进入),引发访问失败 - 如果目标是“仅清理脚本类文件的执行权”,建议先筛选:
find . -name "*.sh" -o -name "*.py" | xargs chmod a-x
验证是否生效
执行后可用 ls -l 快速抽查:
- 原为
-rwxr-xr-x的文件,应变为-rw-r--r-- - 原为
drwxr-xr-x的目录,会变成drw-r--r--(⚠️此时该目录已无法cd或ls) - 若需保留目录的执行权限,只去文件的,就不要用纯
-R a-x,而要用find区分类型











