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

如何用Bash脚本根据文件夹名称中的数字范围批量移动目录

可行Shell脚本方案

不需要将每行拆分到单独文件,直接逐行读取list.txt处理即可,脚本自带容错逻辑,可适配动态变动的目录数量。

实现逻辑

  • 逐行读取路径,兼容路径带空格、特殊字符、文件末尾无换行符的场景
  • 定向提取_1/前的4位数字,避免路径其他位置的下划线、特殊字符干扰提取结果
  • 自动计算所属目标目录编号,无需提前创建所有目录,脚本自动生成缺失的目标目录
  • 内置校验逻辑,非法路径直接跳过不会执行错误操作

完整可运行脚本

#!/bin/bash
# 按需修改以下3个配置项即可使用
LIST_FILE="./list.txt"          # 你的路径列表文件路径
TARGET_PARENT="/opt/target_dir" # 存放folder1、folder2的上级目录路径
INTERVAL=500                    # 每个目录对应的数字区间大小,可自行调整

while IFS= read -r dir_path || [[ -n "$dir_path" ]]; do
    # 跳过空行
    [[ -z "$dir_path" ]] && continue
    # 提取_1/前的4位数字,规则匹配你的路径样例
    target_num=$(echo "$dir_path" | grep -oE '[0-9]{4}_1/$' | cut -d '_' -f1)
    # 校验是否提取到合法4位数字
    if ! [[ "$target_num" =~ ^[0-9]{4}$ ]]; then
        echo "跳过非法路径:$dir_path,未提取到有效目标数字" >&2
        continue
    fi
    # 计算目标folder编号,10#前缀避免0开头的数字被识别为八进制
    folder_id=$(( (10#$target_num -1)/INTERVAL +1 ))
    final_target="${TARGET_PARENT}/folder${folder_id}"
    # 目标目录不存在自动创建
    mkdir -p "$final_target"
    # 执行移动,-n参数避免覆盖已有同名目录,不需要可删除
    mv -n "$dir_path" "$final_target/"
done < "$LIST_FILE"

测试建议

正式执行前可先将脚本中的mv命令替换为echo mv,先跑一遍预览所有移动操作是否符合预期,确认无误后再换回mv执行实际移动:

echo mv -n "$dir_path" "$final_target/"

内容的提问来源于stack exchange,提问作者user2377521

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:36:05