You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求适配Emby的剧集文件夹整理脚本:批量迁移并重命名剧集目录结构

求适配Emby的剧集文件夹整理脚本:批量迁移并重命名剧集目录结构

我完全懂你现在的困扰——一堆零散的剧集文件夹,有的单集单独占一个目录,有的整季打包成一个目录,想整理成Emby能完美识别的规范结构,还得保留原文件夹里的所有内容不动对吧?刚好可以用一个bash脚本来批量搞定这个事,下面我把脚本、用法和注意事项给你理得明明白白:


先明确需求(怕我理解错,再核对一遍)

你的核心要求就是:

  • 原剧集文件夹的内部结构、文件名完全保留,只做目录迁移
  • 从原文件夹名里自动提取「剧集名称」和「季数」(比如S01对应Season 01
  • 最终统一成Emby标准结构:/home/incoming/TV/[剧集名称]/Season [季数]/[原文件夹名]/

比如你举的例子:

  • 原目录Altered.Carbon.S01E05.The.Wrong.Man.1080p.DDP5.1.x264/ → 迁移到Altered Carbon/Season 01/
  • 原目录Black Mirror S01 1080p DD+ 2.0 x264/ → 迁移到Black Mirror/Season 01/

直接上可用的bash脚本

把下面的代码保存成organize_tv.sh文件:

#!/bin/bash

# 目标根目录:所有整理后的剧集都会放到这个目录下的对应子文件夹
TARGET_ROOT="/home/incoming/TV"

# 遍历当前目录下的所有剧集文件夹(脚本放在要处理的目录下执行即可)
for folder in ./*; do
    # 只处理目录,跳过普通文件
    [ -d "$folder" ] || continue

    # 获取纯文件夹名(去掉路径前缀)
    FOLDER_NAME=$(basename "$folder")

    # 提取季数:匹配S后面跟两位数字的格式(比如S01、S02)
    SEASON=$(echo "$FOLDER_NAME" | grep -o 'S[0-9][0-9]' | head -n 1)
    if [ -z "$SEASON" ]; then
        echo "⚠️ 警告:无法从 $FOLDER_NAME 中提取季数,跳过该文件夹"
        continue
    fi
    # 转换成Emby喜欢的Season 01格式
    SEASON_DIR="Season ${SEASON:1}"

    # 提取剧集名称:先去掉季数及后面的内容,再把点号换成空格,清理末尾多余空格
    SERIES_NAME=$(echo "$FOLDER_NAME" | sed "s/${SEASON}.*//" | tr '.' ' ' | sed 's/[[:space:]]*$//')
    # 兼容空格分隔的命名格式(比如Black Mirror S01...)
    if [ -z "$SERIES_NAME" ]; then
        SERIES_NAME=$(echo "$FOLDER_NAME" | sed "s/ ${SEASON}.*//" | tr '.' ' ' | sed 's/[[:space:]]*$//')
    fi
    if [ -z "$SERIES_NAME" ]; then
        echo "⚠️ 警告:无法从 $FOLDER_NAME 中提取剧集名称,跳过该文件夹"
        continue
    fi

    # 构建最终的目标路径
    DEST_PATH="${TARGET_ROOT}/${SERIES_NAME}/${SEASON_DIR}"

    # 创建目标目录(如果不存在的话)
    mkdir -p "$DEST_PATH"

    # 移动原文件夹到目标位置(-v参数可以显示移动过程)
    mv -v "$folder" "$DEST_PATH/"
done

echo "🎉 批量整理完成!"

脚本使用步骤

  1. 放置脚本:把organize_tv.sh放到/home/incoming/TV目录下(就是你存放零散剧集文件夹的那个目录)
  2. 赋予执行权限:打开终端,执行下面的命令:
    chmod +x organize_tv.sh
    
  3. 执行脚本:进入/home/incoming/TV目录,执行:
    ./organize_tv.sh
    

几个重要的注意事项

  • 先测试再批量:建议先复制几个剧集文件夹到测试目录,跑一遍脚本看看效果,确认符合预期再批量执行
  • 兼容多种命名:脚本支持两种常见的剧集命名格式——点分隔(比如Altered.Carbon.S01...)和空格分隔(比如Black Mirror S01...
  • 容错机制:如果某个文件夹名里找不到Sxx格式的季数,或者提取不出剧集名称,脚本会自动跳过并提示,不会乱处理
  • 自定义路径:如果你的剧集不在/home/incoming/TV下,修改脚本开头的TARGET_ROOT变量为你的目标根目录即可

备注:内容来源于stack exchange,提问作者Loop1

火山引擎 最新活动