编写Bash脚本:基于最后创建目录生成递增命名的新目录
Bash脚本实现递增命名目录生成
完整脚本示例
#!/bin/bash TARGET_DIR="output" # 查找output下所有5位数字命名的目录,排序后取最后一个 last_dir=$(find "$TARGET_DIR" -maxdepth 1 -type d -name '[0-9][0-9][0-9][0-9][0-9]' | sort | tail -1) if [ -z "$last_dir" ]; then # 无匹配目录时从00001开始 new_dir_name="00001" else # 提取纯目录名,转十进制整数后加1,再格式化回5位带前导零的字符串 last_num=$(basename "$last_dir") new_num=$((10#$last_num + 1)) new_dir_name=$(printf "%05d" "$new_num") fi # 创建新目录 mkdir -p "$TARGET_DIR/$new_dir_name" echo "Created directory: $TARGET_DIR/$new_dir_name"
关键细节说明
- 用
find替代ls:避免ls输出处理时遇到特殊字符(如空格、换行)的问题,同时精准过滤出5位数字命名的目录。 - 十进制解析:
10#$last_num强制把以0开头的数字字符串按十进制解析,防止被当成八进制导致报错(比如00008在八进制中无效)。 - 格式化输出:
printf "%05d"确保新目录名始终是5位长度,不足补前导零。
原有命令的问题修正
你之前用ls -t是按修改时间排序,但需求是按数字递增命名,应该按名称排序而非修改时间。另外直接处理ls输出的可靠性差,改用find更稳妥。
内容的提问来源于stack exchange,提问作者Paul W
相关产品推荐
相关产品推荐

