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

统计所有用户均未设置执行位的子目录数量的更优实现方案

解决方案

你原有实现的! -x $d仅校验当前用户的执行权限,无法满足所有用户的校验需求,推荐用find命令实现更简洁的写法,适配你的需求:

1. 统计当前目录下一级子目录(和你原有*/遍历范围一致)

find . -mindepth 1 -maxdepth 1 -type d ! -perm /u+x,g+x,o+x | wc -l

参数说明:

  • -mindepth 1:排除当前目录本身
  • -maxdepth 1:仅遍历当前目录下的一级子项,不递归下一层
  • -type d:仅匹配目录类型
  • ! -perm /u+x,g+x,o+x:-perm /mode表示任意权限位匹配mode就返回真,取反后即代表所有者、用户组、其他用户三类身份都没有执行权限,完全匹配你「所有用户执行位未设置」的需求
  • wc -l:统计匹配结果的行数,即符合条件的目录总数

如果目录名可能包含换行符,可以用更严谨的写法避免统计错误:

find . -mindepth 1 -maxdepth 1 -type d ! -perm /u+x,g+x,o+x -printf '.' | wc -c

2. 递归统计所有层级子目录

去掉-maxdepth 1参数即可:

find . -mindepth 1 -type d ! -perm /u+x,g+x,o+x | wc -l

如果你偏好shell循环写法,适配所有用户校验的调整版如下:

count=0; for d in */; do [[ -d "$d" && ! $(stat -c "%a" "$d") =~ [1357] ]] && (( ++count )); done; echo "$count"

通过stat命令直接读取目录的8进制权限位,判断权限中不存在带执行位的数值(1、3、5、7),即可确认所有用户都没有执行权限。


内容的提问来源于stack exchange,提问作者Simd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:24:01