如何使用Bash脚本基于现有文件夹名创建序列编号文件夹
Bash批量生成带序列编号文件夹实现方案
需求1:基于指定目录下已有子文件夹名生成序列文件夹
实现逻辑
- 读取目标目录下的首个一级子文件夹名作为生成的基础名称
- 支持自定义生成数量、编号补零位数
- 自动跳过已存在的文件夹,不会覆盖原有数据
实现脚本
#!/bin/bash # 可自定义参数 TARGET_DIR="/home/Pictures" # 要操作的目标父目录 GEN_COUNT=10 # 要生成的序列文件夹总数 DIGITS=2 # 编号位数,2对应01/02格式,3对应001/002格式 # 自动获取目标目录下首个一级子文件夹名作为基础名 BASE_NAME=$(find "$TARGET_DIR" -maxdepth 1 -type d ! -path "$TARGET_DIR" | head -n 1 | xargs basename 2>/dev/null) # 异常判断 if [ -z "$BASE_NAME" ]; then echo "错误:目标目录下未找到任何子文件夹,无法获取基础名称" exit 1 fi # 批量生成文件夹 for i in $(seq 1 $GEN_COUNT); do # 补零格式化编号 SEQ=$(printf "%0${DIGITS}d" $i) FOLDER_NAME="${BASE_NAME}-${SEQ}" mkdir -p "${TARGET_DIR}/${FOLDER_NAME}" done echo "已完成生成,基础名称:$BASE_NAME,共生成${GEN_COUNT}个序列文件夹"
需求2:基于父文件夹自身名称生成序列文件夹
实现逻辑
- 直接读取目标父目录的名称作为生成的基础名称
- 支持自定义生成数量、编号补零位数
- 自动跳过已存在的文件夹,不会覆盖原有数据
实现脚本
#!/bin/bash # 可自定义参数 TARGET_DIR="/home/Songs" # 要操作的目标父目录 GEN_COUNT=10 # 要生成的序列文件夹总数 DIGITS=3 # 编号位数,2对应01/02格式,3对应001/002格式 # 自动获取父目录名称作为基础名 BASE_NAME=$(basename "$TARGET_DIR") # 批量生成文件夹 for i in $(seq 1 $GEN_COUNT); do # 补零格式化编号 SEQ=$(printf "%0${DIGITS}d" $i) FOLDER_NAME="${BASE_NAME}-${SEQ}" mkdir -p "${TARGET_DIR}/${FOLDER_NAME}" done echo "已完成生成,基础名称:$BASE_NAME,共生成${GEN_COUNT}个序列文件夹"
使用说明
- 脚本使用前只需修改
可自定义参数区域的三个变量即可适配你的场景 - 若需要批量处理多个目录,在外层套目录循环即可实现
- 脚本中的
mkdir -p指令不会覆盖已存在的文件夹内容,操作安全
内容的提问来源于stack exchange,提问作者BigBopper
相关产品推荐
相关产品推荐

