Bash如何编写循环脚本自动创建当前日期下序号递增的不存在目录
原脚本逻辑错误分析
- 循环条件逻辑完全反向:你需要的是找到第一个不存在的序号,仅创建1个目录,但原脚本的逻辑是「只要当前序号目录不存在,就创建并继续递增」:
- 空目录场景下,i从0开始,所有序号的目录都不存在,会无限创建0、1、2...的目录,导致死循环
- 已存在
site_日期_0目录的场景下,循环初始判断就不满足,整个循环直接跳过,不会执行任何创建操作
- 核心需求理解偏差:需求是找到当前日期下最大已存在序号+1的新目录,仅创建1个,而非批量创建所有缺失的序号目录
正确实现方案
实现思路
- 从序号0开始遍历,直到找到第一个不存在的对应格式目录
- 找到目标序号后,仅创建这一个目录即可
可用脚本
#!/bin/bash date_str=$(date +%F) site_prefix="site" i=0 # 循环直到找到第一个不存在的目录序号 while [ -d "${site_prefix}_${date_str}_${i}" ] do i=$((i + 1)) done # 生成目标目录名并创建 target_dir="${site_prefix}_${date_str}_${i}" echo "创建目录: ${target_dir}" mkdir "${target_dir}"
验证场景
- 无任何同格式目录:循环直接判断i=0的目录不存在,创建
site_当前日期_0,符合预期 - 已存在0-6序号的目录:循环会将i从0递增到7,判断7的目录不存在后创建
site_当前日期_7,符合需求
内容的提问来源于stack exchange,提问作者user11532787
相关产品推荐
相关产品推荐

