Mac OS Big Sur(zsh)下按目录名称中的日期条件遍历目录并执行脚本
解决zsh下按月份筛选目录并执行脚本的问题
我来帮你搞定这个在Mac OS Big Sur的zsh环境中筛选目录的需求!你的核心问题是要从「年-月-日 名称」格式的目录里,挑出月份小于6的来执行脚本,下面是修改后的完整代码和详细解释:
for f in ./*; do # 跳过非目录的项目,确保只处理文件夹 [[ -d "$f" ]] || continue # 从目录名中提取月份部分:格式是YYYY-MM-DD 名称,取第5到第6位字符(zsh索引从0开始) month="${f:5:2}" # 强制按十进制解析月份(避免0开头的数字被当成八进制),判断是否小于6 if (( 10#$month < 6 )); then # 进入目录执行你的脚本逻辑 (cd "$f"; printf "file '%s'\n" *.csv > mylist.txt ) # 可选:打印处理提示,方便跟踪进度 echo "已完成目录处理: $f" fi done
关键细节解释:
[[ -d "$f" ]] || continue:遍历当前目录下所有项目时,先判断是不是目录,不是的话直接跳过,避免误处理文件。${f:5:2}:zsh的参数扩展语法,${变量名:起始位置:长度}。因为你的目录名是YYYY-MM-DD 名称格式,前5个字符是YYYY-,从第5位开始取2个字符正好是月份(比如2021-05-02 Linus里的05)。10#$month:这里加10#是为了强制zsh把月份字符串当成十进制数解析——如果直接用$month,像05这种以0开头的数字会被默认当成八进制,但八进制里没有08、09,会导致报错。用10#就可以避免这个问题,所有月份都按十进制处理。(( 10#$month < 6 )):zsh的算术比较语法,用来判断月份是否小于6,满足条件就执行后面的脚本逻辑。
这个写法完全适配你的zsh环境,而且逻辑清晰,容易维护。
内容的提问来源于stack exchange,提问作者Misha
相关产品推荐
相关产品推荐

