如何识别剧集文件名中的季终集并添加Final后缀重命名?
剧集最后一集批量重命名解决方案
Python 实现方案
适合跨平台(Windows/macOS/Linux)使用,需提前安装Python环境。
核心逻辑:遍历目标目录下的剧集文件,用正则提取剧名、季数、集数信息,按季分组后找出每季集数最大的文件,添加- Final后缀完成重命名。
import os import re # 匹配你指定的文件名格式 pattern = re.compile(r'^([\w\d\s]+)_S(\d{2})E(\d{1,3})(\..+)$') target_dir = "./" # 替换为你的剧集文件实际目录 # 存储每季的最大集数文件:key为(剧名, 季数),value为(集数数值, 文件名) season_files = {} # 遍历目录下所有文件 for filename in os.listdir(target_dir): match = pattern.match(filename) if not match: continue # 跳过不符合格式的文件 show_name = match.group(1) season_num = match.group(2) episode_num = int(match.group(3)) ext = match.group(4) key = (show_name, season_num) # 对比更新该季最大集数的文件 if key not in season_files or episode_num > season_files[key][0]: season_files[key] = (episode_num, filename) # 执行重命名操作 for (show_name, season_num), (ep_num, old_name) in season_files.items(): new_name = f"{show_name}_S{season_num}E{ep_num} - Final{ext}" old_path = os.path.join(target_dir, old_name) new_path = os.path.join(target_dir, new_name) os.rename(old_path, new_path) print(f"已重命名:{old_name} → {new_name}")
使用说明:
- 修改
target_dir为你的剧集文件所在路径 - 执行前建议备份文件,避免意外
- 仅处理符合指定格式的文件,其他文件自动跳过
Bash 实现方案
适合Linux/macOS用户,无需额外安装工具,直接在终端运行。
核心逻辑:用find遍历文件,sed提取关键信息,sort按季和集数排序,awk筛选每季最后一集,最后批量重命名。
#!/bin/bash TARGET_DIR="./" # 替换为你的剧集目录 # 遍历文件、提取信息并筛选每季最后一集 find "$TARGET_DIR" -maxdepth 1 -type f -name "*_S[0-9][0-9]E[0-9]*" | while read -r file; do filename=$(basename "$file") # 提取剧名、季数、集数、后缀 show_name=$(echo "$filename" | sed -E 's/^([\w\d\s]+)_S[0-9]{2}E[0-9]{1,3}\..+$/\1/') season=$(echo "$filename" | sed -E 's/^[\w\d\s]+_S([0-9]{2})E[0-9]{1,3}\..+$/\1/') episode=$(echo "$filename" | sed -E 's/^[\w\d\s]+_S[0-9]{2}E([0-9]{1,3})\..+$/\1/') # 输出排序用字段 echo -e "$show_name\t$season\t$episode\t$filename" done | sort -k1,1 -k2,2n -k3,3n | awk ' BEGIN { prev_show = ""; prev_season = "" } { if ($1 != prev_show || $2 != prev_season) { if (prev_show != "") { print last_file } prev_show = $1 prev_season = $2 } last_file = $4 } END { print last_file } ' | while read -r old_name; do # 构造新文件名并执行重命名 new_name=$(echo "$old_name" | sed -E 's/(\..+)$/ - Final\1/') mv "$TARGET_DIR/$old_name" "$TARGET_DIR/$new_name" echo "已重命名:$old_name → $new_name" done
使用说明:
- 将代码保存为
rename_final_ep.sh - 给脚本添加执行权限:
chmod +x rename_final_ep.sh - 修改
TARGET_DIR为你的剧集目录 - 终端运行脚本:
./rename_final_ep.sh - 执行前建议备份文件
内容的提问来源于stack exchange,提问作者Martin Julien
相关产品推荐
相关产品推荐

