如何使用Bash创建不覆盖已有文件的连续递增编号.txt文件
原脚本核心问题
当前脚本硬编码了扫描范围为1-10,仅会判断该区间内的文件是否存在、是否需要创建。首次运行创建完01_name.txt到10_name.txt后,二次运行时该区间内所有文件都已存在,脚本不会向后扫描11、12等更大的编号,自然无法生成递增的新文件。
可实现目标的调整方案
核心逻辑修改为:每次运行时先扫描当前目录下所有匹配命名规则的文件,提取当前已存在的最大编号,从最大编号的下一个数值开始,创建指定数量的新文件,彻底移除硬编码的扫描范围。
可直接运行的完整脚本如下:
#! /bin/bash # 可按需调整:单次运行要生成的新文件数量 NEW_FILE_COUNT=10 # 可按需调整:文件统一后缀 FILE_SUFFIX="_name.txt" # 扫描当前目录下所有匹配「数字+后缀」的文件,提取编号排序后取最大值 # 无匹配文件时,默认最大值为0 max_exist_num=$(ls -1 [0-9]*${FILE_SUFFIX} 2>/dev/null | sed "s|${FILE_SUFFIX}||" | sort -n | tail -n 1) max_exist_num=${max_exist_num:-0} # 计算新文件的编号区间 start_num=$((max_exist_num + 1)) end_num=$((start_num + NEW_FILE_COUNT - 1)) # 循环创建文件,保留存在性判断避免覆盖 for z in $(seq -w ${start_num} ${end_num}); do [[ ! -f "${z}${FILE_SUFFIX}" ]] && touch "${z}${FILE_SUFFIX}" done
调整后效果说明
- 首次运行时,目录下无匹配文件,会从01开始创建10个.txt文件
- 二次运行时,检测到当前最大编号为10,会自动从11开始创建接下来的10个文件,全程不会覆盖已有文件
- 支持适配手动新建、删除同规则文件后的场景,只要不出现编号断层(比如删掉05号文件但10号还存在),就会从当前最大编号继续往后生成
- 保留的文件存在性校验逻辑,能避免极端并发、手动创建同编号文件时的误覆盖操作
内容的提问来源于stack exchange,提问作者Ossy
相关产品推荐
相关产品推荐

