PT 站做种久了,磁盘里总会多出一堆“幽灵文件”
种子下完了、做种也做够了,顺手把任务从列表里删掉。结果文件还静静躺在硬盘里,占着空间却没人管。时间一长,下载目录里堆满了这些“已经不在做种、但又没删干净”的文件。
手动一个个找太麻烦,尤其是种子多、目录深的时候,根本分不清哪些还在做种、哪些已经成了孤儿。
以前用nevinee/qbittorrent,有列出未做种文件删除的功能,但是切到Transmission发现没有这个功能。
自备python环境,我是Unraid直接插件安装python,插件autoexec.sh添加pip3 install transmission-rpc这样每次开机都会安装所需依赖。
这两个脚本就是为了解决这个问题:
Unraid直接User Scripts插件添加这两个脚本
脚本1会去问 Transmission:“你现在到底在做种哪些文件?”
然后把本地目录里的文件和它对比,找出那些“本地有、但 Transmission 已经不管了”的文件,生成一个清单。
#!/usr/bin/env python3
"""
Transmission 未做种文件检查脚本
功能:对比本地目录和 Transmission 正在做种的文件,生成可编辑的删除列表
"""
from transmission_rpc import Client
import os
# ====== 配置区域(按需修改) ======
HOST = "127.0.0.1" # Transmission RPC 地址,本机用 127.0.0.1
PORT = 9091 # Transmission WebUI / RPC 端口
USERNAME = "None" # 登录用户名,没有认证就保持 None
PASSWORD = "None" # 登录密码,没有认证就保持 None
DOWNLOAD_DIR = "/mnt/library/pt" # 宿主机上的下载目录(对应容器内的 /pt)
LIST_FILE = "/mnt/library/pt/orphans_to_delete.txt" # 生成的未做种文件列表路径
# ==================================
client = Client(host=HOST, port=PORT, username=USERNAME, password=PASSWORD)
# 收集 Transmission 当前管理的所有文件
managed = set()
for torrent in client.get_torrents(arguments=["downloadDir", "files", "priorities", "wanted"]):
# 把容器内路径 /pt 转换成宿主机路径
host_dir = torrent.download_dir.replace("/pt", DOWNLOAD_DIR, 1)
for f in torrent.get_files():
full_path = os.path.normpath(os.path.join(host_dir, f.name))
managed.add(full_path)
# 收集本地下载目录里的所有文件
local_files = set()
for root, dirs, files in os.walk(DOWNLOAD_DIR):
for name in files:
full_path = os.path.normpath(os.path.join(root, name))
local_files.add(full_path)
# 差集 = 本地有但 Transmission 不在做种的文件
orphans = sorted(local_files - managed)
# 写入列表文件
with open(LIST_FILE, "w", encoding="utf-8") as f:
for p in orphans:
f.write(p + "\n")
print(f"共发现 {len(orphans)} 个未做种文件")
print(f"列表已保存到:{LIST_FILE}")
print("请用文本编辑器打开这个文件,删除你不想删除的行,保存后再运行删除脚本。")
脚本2负责根据这份清单删除文件。
删除前你可以先打开清单,把不想删的行手动去掉,确认无误再执行,最大程度避免误删。
#!/usr/bin/env python3
"""
根据列表删除 Transmission 未做种文件
使用前请先运行「01_生成未做种列表.py」,并手动检查 orphans_to_delete.txt
"""
import os
# ====== 配置区域 ======
LIST_FILE = "/mnt/library/pt/orphans_to_delete.txt" # 上一步生成的列表文件
# ======================
if not os.path.exists(LIST_FILE):
print(f"列表文件不存在:{LIST_FILE}")
print("请先运行「01_生成未做种列表.py」")
exit(1)
with open(LIST_FILE, "r", encoding="utf-8") as f:
paths = [line.strip() for line in f if line.strip()]
print(f"准备删除 {len(paths)} 个文件...\n")
deleted = 0
failed = 0
total_size = 0
for p in paths:
if not os.path.exists(p):
print(f"[跳过] 文件已不存在: {p}")
continue
try:
size = os.path.getsize(p)
os.remove(p)
print(f"[已删除] {p} ({size / 1024 / 1024:.1f} MB)")
deleted += 1
total_size += size
except Exception as e:
print(f"[失败] {p} → {e}")
failed += 1
print(f"\n完成!成功删除 {deleted} 个文件,失败 {failed} 个")
print(f"共释放空间:{total_size / 1024 / 1024 / 1024:.2f} GB")
效果很直接:
- 快速清理不再做种的垃圾文件
- 释放被白白占用的硬盘空间
- 不需要一个个去翻文件夹
- 全程可控,删之前可以自己把关
简单说就是:让硬盘里只留下真正还在做种的文件,其余的该清理就清理。