Unix下遍历目录并对权限为drwx-----T+的文件执行操作的实现
方案1:修改现有脚本的单层级遍历逻辑
你可以直接用ls -ld加静默grep的返回值做判断,不需要额外嵌套[]语法,grep -q不会输出内容,仅通过状态码返回匹配结果:
#!/bin/sh cd /z/vendors || exit 1 # 同时匹配隐藏目录和非隐藏目录 for FILE in .[!.]?* *; do # 跳过通配符未匹配到的无效条目 [ -e "$FILE" ] || continue # -ld参数只输出目录本身的权限信息,不展开内部内容 if ls -ld "$FILE" | grep -q "drwx-----T+"; then cd "$FILE" || continue # 此处写你要执行的操作 cd .. fi done
方案2:支持多层子目录的更稳妥写法
如果需要遍历所有层级的子目录,直接用find命令比手写递归循环容错性更高:
#!/bin/sh find /z/vendors -type d -ls | grep "drwx-----T+" | awk '{print $11}' | while read -r DIR; do cd "$DIR" || continue # 此处写你要执行的操作 cd - > /dev/null || exit 1 done
注意:上述
ls匹配的方案兼容性更好,适配Linux、macOS等不同系统;如果路径中存在空格,执行前不要修改IFS环境变量,避免路径被拆分出错。
内容的提问来源于stack exchange,提问作者Fnechz
相关产品推荐
相关产品推荐

