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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 09:22:37