openclaw-sync/scripts/fix-tvshows-jellyfin.py

54 lines
1.8 KiB
Python

#!/usr/bin/env python3
from pathlib import Path
import argparse
import shutil
ROOT = Path('/mnt/nas/media/tvshows')
def move(src: Path, dst: Path, apply: bool):
print(f"MV {src} -> {dst}")
if not apply:
return
dst.parent.mkdir(parents=True, exist_ok=True)
if dst.exists():
print(f"SKIP target exists: {dst}")
return
shutil.move(str(src), str(dst))
def main():
ap = argparse.ArgumentParser(description='Normalize TV show names for Jellyfin')
ap.add_argument('--apply', action='store_true', help='actually perform changes')
args = ap.parse_args()
apply = args.apply
# 1) House of Cards season dirs
show = ROOT / '纸牌屋'
if show.exists():
for p in sorted(show.iterdir()):
if p.is_dir() and p.name.startswith('Season') and p.name not in [f'Season {i:02d}' for i in range(100)]:
suffix = p.name[len('Season'):]
if suffix.isdigit():
move(p, show / f'Season {int(suffix):02d}', apply)
# 2) Hi My Sweetheart junk files to _junk
show = ROOT / '海派甜心'
if show.exists():
for p in sorted(show.iterdir()):
if p.is_file() and (p.suffix.lower() == '.webp' or p.name.endswith('.aria2')):
move(p, show / '_junk' / p.name, apply)
# 3) Love Apartment movie-like folder move aside
show = ROOT / '爱情公寓'
movie_dir = show / '爱情公寓 (2018)'
if movie_dir.exists():
move(movie_dir, ROOT / '爱情公寓(电影特别篇待整理)', apply)
print('\nDone.' if apply else '\nDry-run done. Re-run with --apply to execute.')
print('Note: 黑镜 Season 00 was intentionally not auto-changed; it needs manual confirmation.')
if __name__ == '__main__':
main()