You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何递归执行chmod仅为目录添加ug+X权限

如何递归执行chmod仅为目录添加ug+X权限

我太懂你这种踩坑的感觉了——本来以为chmod +X只会给目录加执行权限,结果发现那些本来就有执行位的文件也被偷偷加上了全局执行权限,完全偏离预期。别慌,用find命令就能精准实现你要的效果:只递归修改目录的权限,丝毫不碰普通文件。

直接可用的命令

find /你要操作的路径 -type d -exec chmod ug+X {} +

命令拆解说明

  • -type d:这是关键,让find只筛选出所有目录,完全忽略普通文件、链接等其他类型的文件
  • -exec chmod ug+X {} +:对找到的每一批目录执行chmod ug+X操作,{}代表找到的目录路径,+表示把多个目录一次性传给chmod,比逐个处理效率更高

验证一下效果

用你给出的测试场景来验证:

# 创建测试目录和文件
mkdir directory
touch file
# 设置初始权限
chmod 654 directory file 
# 查看初始状态
ls -ld directory file
# 执行我们的命令
find . -type d -exec chmod ug+X {} +
# 再次查看结果
ls -ld directory file

执行后你会得到想要的结果:

drwxr-xr--. 2 user group 4096 Nov 26 09:50 directory
-rw-r-xr--. 1 user group    0 Nov 26 09:50 file

补充:另一种写法(用xargs)

如果你习惯用xargs,也可以这么写:

find /你要操作的路径 -type d | xargs chmod ug+X

不过要注意,如果目录名里包含空格,这种写法可能出问题,还是前面的-exec ... +更稳妥。

为什么之前的方法不行?

再回顾下chmod的X选项规则:

execute/search only if the file is a directory or already has execute permission for some user (X)

也就是说,只要文件本身已经有任意用户的执行位,+X就会给所有用户加上执行位。而我们用find只锁定目录,就彻底避开了这个问题,完美实现只给目录加权限的需求。

备注:内容来源于stack exchange,提问作者carl verbiest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 11:33:03