如何用zsh glob查找空目录或仅含.DS_Store文件的目录?
Zsh Glob语法匹配目标目录
1. 精准匹配空目录或仅含.DS_Store的目录
可以结合zsh的glob标记和shell条件判断实现,递归匹配的写法如下:
**/*(/e:'[[ $(ls -A -- $REPLY | grep -vxF .DS_Store | wc -l) -eq 0 ]]':)
**/*:递归匹配所有目录(仅匹配当前目录下的目标用*即可)(/e:...):e:标记后嵌入shell代码,用于验证目录内容ls -A -- $REPLY:列出目录下除.和..之外的所有节点grep -vxF .DS_Store:精确过滤掉.DS_Store文件- 最终统计剩余节点数为0,说明目录要么是空的,要么仅包含
.DS_Store
2. 匹配空目录或仅含任意隐藏文件/节点的目录
有两种简洁实现方式:
方式一:利用数组对比
**/*(/e:'local arr=($REPLY/*(DN)); [[ ${#arr[@]} -eq 0 || ${(M)arr:#$REPLY/.*} == ${arr[@]} ]]':)
$REPLY/*(DN):D标记匹配隐藏文件,N标记避免空匹配时报错,获取目录下所有节点${#arr[@]} -eq 0:判断是否为空目录${(M)arr:#$REPLY/.*}:筛选出所有隐藏节点,若筛选结果和原数组完全一致,说明目录仅含隐藏节点
方式二:结合空目录标记和条件判断
**/*(/^F|e:'[[ -z $(ls -A -- $REPLY | grep -v "^\\.") ]]':)
/^F:你已经熟悉的空目录匹配标记e:后的条件:列出目录节点并过滤掉隐藏文件,若结果为空,说明目录仅含隐藏节点
内容的提问来源于stack exchange,提问作者XDR
相关产品推荐
相关产品推荐

