自动删种功能
pt-tools 提供自动删种功能,帮助用户在长时间刷流过程中自动管理磁盘空间,避免硬盘被撑满。
功能概述
自动删种功能定时检查下载器中的种子状态,根据用户配置的规则自动删除满足条件的种子及数据文件,释放磁盘空间。
几种自动删除各管哪些种子:
- pt-tools 推送的种子,按「自动删种」的规则处理(管理范围选了按标签或全部种子时,范围里的也算)。
- 刷流任务正在管的种子,按刷流任务自己的规则处理,见刷流。
- 带
pt-tools-keep或保护标签的种子、H&R 没做满的种子,哪个自动功能都不删。
核心特点:
- 安全优先:默认只管理 pt-tools 自己推送的种子,不碰用户手动添加的
- H&R 保护:自动识别带有 H&R 要求的种子,在未满足做种时长前不会删除
- 一键保留:在「下载器」页的种子列表里点「保留」,种子带上
pt-tools-keep标签,哪个自动功能都不删它,见保留种子 - 灵活条件:支持做种时间、分享率、不活跃时间等多种删除条件,支持 AND/OR 组合
- 做种竞争度:做种的人比下载的人多太多时删除或只暂停,见做种竞争度
- 磁盘保底:磁盘空间保护机制(默认开启),空间不足时自动拦截新种子推送并按优先级清理存量
- 推送拦截:RSS 自动下载和手动推送在磁盘空间低于阈值时自动停止,防止撑爆硬盘
- Scope 严格隔离:清理操作严格遵守管理范围设置,紧急清理也不会越界删除范围外的种子
- 多下载器安全:每个下载器独立管理,通过数据库记录精确匹配
配置说明
在 Web 管理界面的「规则 → 自动清理」页面配置:打开「自动删种」卡片中的「启用自动删种」后,其余选项才会显示。
基本设置
| 配置项 | 默认值 | 说明 |
|---|---|---|
| 启用自动删种 | 关 | 总开关 |
| 检查间隔 | 30 分钟 | 执行清理任务的时间间隔,最小 5 分钟 |
| 删除时连数据文件一起删 | 开 | 删除种子时是否同时删除下载的数据文件 |
数据还被下载器里别的种子用着时(例如 IYUU 辅种 加入的种子和原种子用的是同一份文件),即使开启了「删除时连数据文件一起删」,也只删种子、保留数据,以免另一个种子失去数据。pt-tools 按种子数据所在的路径判断,路径相同就算共用(qBittorrent 里不建子文件夹的多文件种子按文件判断,有相同的文件才算);共用这份数据的种子一起删时,数据照常删除。
管理范围
提供三种模式,决定哪些种子会被自动删种管理:
| 模式 | 说明 | 安全性 |
|---|---|---|
| 仅本应用推送的种子(默认) | 通过数据库记录精确匹配,只管理 pt-tools 推送并记录在案的种子 | ⭐⭐⭐ 最安全 |
| 按标签匹配 | 管理下载器中带有指定标签的所有种子 | ⚠ 手动添加相同标签的种子也会被管理 |
| 下载器中所有种子 | 管理下载器中的全部种子 | ⚠⚠ 包括非本应用添加的种子 |
建议:始终使用「仅本应用推送的种子」模式。其他模式仅在您完全理解风险后使用。
Scope 隔离保证:无论使用哪种管理范围,自动删种(包括紧急清理)都严格遵守所选范围,不会越界删除范围外的种子。例如选择「仅本应用推送的种子」时,即使磁盘空间极度紧张触发了紧急清理,也绝对不会删除您手动添加到下载器的种子。
删除条件
当种子满足配置的条件时,会被标记为可删除。
| 条件 | 说明 | 示例 |
|---|---|---|
| 做种时间超过 | 做种时长达到 N 小时后可删 | 72 小时 |
| 分享率达到 | 分享率 ≥ N 后可删 | 2.0 |
| 不活跃超过 | 正在做种、最近 N 小时没有上传或下载时可删 | 48 小时 |
| 低效做种 | 下完以后做种超过 N 小时、分享率仍低于 M 时可删 | 3 小时 / 0.5 |
| 其他免费种子免费过了没下完就删 | RSS 里没选免费结束时暂停或删除的免费种子,免费期过了没下完 | 开/关 |
| 做种竞争度过高时处理 | 做种人数比下载人数(S/L)超过上限时删除或暂停 | 30 |
「不活跃」看下载器记的最后一次上传或下载数据的时间(qBittorrent、Transmission 都记),不看检查那一刻的速度:平时一直有上传、检查时恰好为 0 的种子不删;下完以后一直没有上传的种子,下完满 N 小时就删。下载器没给这个时间时按下完的时间算,再没有就按加进下载器的时间算;检查那一刻正在上传或下载的种子不算不活跃,暂停的种子也不算。「低效做种」要两个值都填才生效。
条件关系:
- OR 模式(默认):满足任意一个条件即可删除。适合快速释放空间。
- AND 模式:所有配置的条件都必须同时满足才会删除。更加保守,适合希望充分利用种子价值的场景。
「其他免费种子免费过了没下完就删」单独判断,不受条件关系影响:开启后,免费期已过且未下完的种子在 AND 模式下也会被删除。它只管管理范围里、本应用推送的免费种子中,RSS 的「免费结束时没下完」选了「不处理」的,以及手动推送的;选了暂停或删除的,由免费结束时的处理管(见 RSS 订阅)。它只受保留标签、保护标签与 H&R 保护挡,不等最短保种时间,也不管「保护下载中的种子」:免费一过,再下载就计费了。免费期按 RSS 最近一次读到的站点详情判断:站点延长了免费,等到新的结束时间;取消或提前结束,RSS 读到以后就算免费已过。
设置为 0 的条件不参与判断。例如做种时间设为 72 小时、分享率设为 0,则只按做种时间判断。
做种竞争度
一个种子做种的人很多、下载的人很少时,再做种也很难有上传。勾上「做种竞争度过高时处理」以后,自动删种每一轮按整个种子群的做种人数比下载人数(S/L)判断,超过「S/L 上限」(默认 30)就处理:
| 配置项 | 默认值 | 说明 |
|---|---|---|
| S/L 上限 | 30 | 做种人数 ÷ 下载人数超过这个数算竞争度过高;没有人在下载时按做种人数算,最小 1 |
| 超标时 | 只暂停 | 「只暂停」:暂停种子,可以在「暂停任务」页恢复;「删除」:删掉种子,连不连数据跟着「删除时连数据文件一起删」 |
- 只看正在做种、已经下完、pt-tools 推送到这个下载器的种子(有推送记录的),而且要在管理范围里。手动加进下载器的种子,即使管理范围选了全部种子,也不按竞争度处理。做种人数为 0 的不判断。
- 和其他删除条件一样遵守保护规则:带保留标签或保护标签的、H&R 没做满的、正在下载的(打开了「保护下载中的种子」时)、加进下载器不满最短保种时间的,都不删、不暂停。刷流任务正在管的种子按刷流任务自己的规则处理。
- 它和免费到期一样单独判断,不参与「条件关系」:AND 模式下也照样处理。一个种子对上了别的删除条件时,按那条删除,不再看竞争度。
- 竞争度暂停过的种子,你在下载器里或「暂停任务」页手动开始以后,竞争度不再暂停它;其他删除条件对上了照样删。暂停着的种子也按其他删除条件判断。
- 检查跟着自动删种的检查间隔(默认 30 分钟),「启用自动删种」关着时不判断。整个种子群的人数 qBittorrent 从种子列表里读;Transmission 每一轮一次读出全部种子的 tracker 状态,取工作中的 tracker 报的最大人数。读不到某个种子的人数时,这一轮不判断它,预览里写明有几个。
磁盘空间保护
| 配置项 | 默认值 | 说明 |
|---|---|---|
| 启用磁盘空间保护 | 开 | |
| 最低剩余空间 | 50 GB | 剩余空间低于此值时停止推送新种子 |
| 空间低于下限时紧急清理 | 开 | 剩余空间低于下限时按优先级多删种子、提前检查 |
磁盘空间保护提供双重保护:
- 推送拦截(入口防护):RSS 自动下载和手动推送在检测到下载器磁盘空间低于阈值时,自动跳过推送,不再往下载器塞新种子。同一批次中一旦检测到空间不足,会立即停止处理剩余种子。可用空间按下载器报告的剩余空间,扣掉没下完的种子还要下载的体积,再扣掉刚推送、下载器里尚未列出的种子的体积(列出以后按下载器报告的剩余体积算,不重复扣;一直没有列出的 15 分钟后不再扣)。
- 紧急清理(存量清理,勾着「空间低于下限时紧急清理」时):自动删种定时检查时,如果磁盘空间低于阈值,即使种子没有满足上面的删除条件,也会在管理范围内按综合评分从高到低强制删除;推送遇到空间不足时,自动删种也会提前开始一轮检查。去掉这个勾,空间不足时只拦截推送,不多删种子,也不提前检查。以下因素都会提高评分:
- 已暂停
- 分享率高
- 做种时间长
- 不活跃(当前上传速度为 0)
- 体积大(释放空间多)
注意:紧急清理严格遵守管理范围设置。如果管理范围内的可删种子不足以腾出所需空间,系统不会越界删除范围外的种子。此时推送拦截机制会阻止新种子进入,防止磁盘被进一步占满。
紧急清理只在开启「删除时连数据文件一起删」时才会额外删种:只从下载器移除任务不会释放磁盘空间。计算还差多少空间时,按删除条件本来就要删的种子会先算进去,不会因此多删。数据还被别的种子用着时,删一个腾不出空间:共用这份数据的种子都可以删时,紧急清理把它们一起挑上,空间只算一次;其中有受保护或不在管理范围的,这一组都不挑。
保护规则
以下种子即使满足删除条件也不会被删除:
| 规则 | 默认值 | 说明 |
|---|---|---|
| 保留标签 | 内置 | 带 pt-tools-keep 标签的种子不删,去不掉,见保留种子 |
| 保护下载中的种子 | 关 | 正在下载或校验中的种子不删 |
| 保护 H&R 种子 | 开 | 未满足站点 H&R 做种时长要求的种子不删 |
| 最短保种时间 | 24 小时 | 加进下载器不满 N 小时的种子不删 |
| 保护标签 | 空 | 带有指定标签的种子不删(输入标签后回车,可添加多个) |
保留标签、保护标签与 H&R(打开了「保护 H&R 种子」时)不只管常规删除条件:紧急清理、做种竞争度、免费结束时的删除(RSS 里选了删除的)都按它们跳过种子,免费结束时本来要删的改成暂停,暂停任务页写明原因。刷流删种按保留标签与保护标签跳过,H&R 按刷流任务自己的判断。读不出 H&R 信息(读库出错)时分不清哪些种子受保护,这一轮不删,免费结束时的删除改成暂停。
这几条保护规则也用在条目详情:「这一季的种子」那一列能不能删、删除一部片时哪些种子受保护,都按这里的设置判断,改了这里那边跟着变。删除弹窗里受保护的种子要逐个勾「仍然删除」才删。
保护规则比删除条件优先,紧急清理也不删受保护的种子;「其他免费种子免费过了没下完就删」例外,它只受保留标签、保护标签与 H&R 保护挡。例如最短保种时间 24 小时、低效做种填了做种 3 小时分享率低于 0.5,加进下载器不满 24 小时的种子分享率再低也不删,要等满了 24 小时才删。想让这类种子早点删,把最短保种时间调小。「预览会删哪些」会列出受保护的种子和各自命中的规则(例如最短保种时间还差几小时)。
保留种子
想留着某个种子(例如 RSS 推的免费种子想收藏),在「下载 → 任务列表」里勾选它,点批量条上的「保留」,或者右键选「保留」。种子会带上 pt-tools-keep 标签,标题前面显示「保留」,鼠标移上去写着哪些自动功能跳过它。选中的种子都保留着时,批量条上这枚按钮变成「取消保留」,右键菜单里也有「取消保留」;去掉标签以后照常按自动删种的规则处理。
- 自动删种(含紧急清理与做种竞争度)、免费结束时的删除和刷流删种都不删带这个标签的种子,做种竞争度也不暂停它。
- 刷流任务正在管的种子点了「保留」,就交还给你:刷流任务不再管它,也不会再加回同一个种子;以后取消保留,它按自动删种的规则处理,不回到刷流任务。
- 想让一条 RSS 推的种子都保留,把这条订阅的「标签」填成
pt-tools-keep。也可以直接在下载器里给种子打这个标签。 - 自动删除在执行前会重新读一次下载器里的种子、按最新的标签复查。所以刚点完「保留」,这一轮也不会删它;种子已经被删掉时,「保留」会报种子不在下载器里了。
- Transmission 没有单独的标签,
pt-tools-keep是一个 label。pt-tools 读出种子现有的 labels,加上或去掉它再整份写回;别的程序同一时刻也在改这个种子的 labels 时,其中一方的修改可能被盖掉。 - 「保留」只在网页的种子列表里有,手机 App 与 MCP 没有这个操作。
执行逻辑
RSS 推送流程(入口防护)
1. RSS 定时任务触发,解析 RSS 获取种子列表
2. 下载 .torrent 文件到本地
3. 遍历待推送的种子文件:
a. 检查种子是否过期/已推送/已存在
b. 检查磁盘空间(如启用保护):
- 空间充足 → 推送种子到下载器
- 空间不足 → 跳过当前种子,停止处理剩余种子自动删种流程(存量清理)
1. 遍历所有已配置的下载器
2. 获取下载器中的种子列表
3. 按管理范围过滤出"可管理"的种子(严格遵守 scope)
4. 排除受保护的种子(保留标签/保护标签/H&R/下载中/最短保种时间;免费过了没下完的兜底只看前三项),刷流任务正在管的种子留给刷流
5. 评估删除条件:免费到期 → 常规条件(按 AND/OR 模式判断)→ 做种竞争度
6. 检查磁盘空间(如启用保护和紧急清理):
- 空间充足 → 只删除满足条件的种子
- 空间不足 → 在管理范围内按评分强制删除直到空间恢复
7. 重新读一次种子列表,不在了的、刚带上保留或保护标签的不删,要暂停的不在做种了也不暂停
8. 执行删除与暂停 + 更新数据库 + 记录日志预览与上次运行
- 「预览会删哪些」按页面上的规则(未保存的也算)把上面的流程走一遍、只算不删:每台下载器写明下载器里共有多少个种子、管理范围里有多少、受保护的有多少、会删哪些、会暂停哪些,以及每个为什么(对上了哪条条件,或者剩余空间不足、紧急清理,做种竞争度写明做种与下载各几人)。数据还被别的种子用着的写明只删种子、保留数据,竞争度设成只暂停的写明只暂停。真的执行的时候以那时下载器里的种子为准。
- 受保护、这一轮不删的种子可以在预览里展开,每个写着命中的保护规则:带保留标签、带了哪个保护标签、H&R 要求做种几小时已做几小时(填了「H&R 上传量达标」时还写要求上传几倍、已传几倍;站点没给要求时写一直保护)、正在下载或校验、最短保种时间还差几小时。刷流任务正在管的种子(按刷流任务的记录认,不看
pt-tools-brush标签)按刷流任务自己的删种规则删,预览里写明有几个。 - 卡片下面写着上一轮的结果(每台下载器删了几个、暂停了几个,连不上、删除或暂停失败的写原因)与下一轮大约什么时候;这些在 pt-tools 重启以后重新算。
H&R 保护
H&R(Hit & Run)是部分 PT 站点的规则,要求用户下载种子后必须做种一定时长,否则会受到处罚。
工作原理:
- pt-tools 在下载种子时会记录站点返回的 H&R 标记和要求的做种时长
- 自动删种时会检查数据库中的 H&R 信息;内置站点定义声明了 H&R 规则的站点,即使种子没有单独的 H&R 标记,也会按站点规则计算要求的做种时长
- 站点规则里没有做种时长时,按站点详情设置里填的「H&R 做种要求(小时)」算;填写以后,之前推送的种子也按它算
- 站点规则写明「上传量达到种子体积的几倍也算达标」时,可以在站点详情设置里填「H&R 上传量达标(倍)」(如 0.9):种子下完以后累计上传达到体积的这么多倍,就算 H&R 达标,做种时长没满、站点没给做种时长都一样。没下完的种子不按上传量算;体积按推送时记下的,没记时按下载器给的。默认 0(不用),只看做种时长;填写以后,之前推送的种子也按它算
- 如果种子有 H&R 要求且当前做种时间未达标(填了上传量要求时,上传量也没达标),该种子会被保护,不会被删除;要求的做种时长不知道(站点规则里没有、站点设置也没填)时同样保护,不删
- 无 H&R 要求的站点和种子不受影响
注意:「H&R 上传量达标」填错会让 H&R 种子提前被删、被站点记 H&R。站点规则里没写明可以按上传量达标的,保持 0。
注意:并非所有站点都提供 H&R 信息。如果站点未返回 H&R 标记、内置站点定义中也没有 H&R 规则,pt-tools 无法自动识别。建议同时设置合理的最短保种时间作为额外保障。
多下载器安全
当配置了多个下载器时:
- 每个下载器独立处理,互不影响
- 「仅本应用推送的种子」模式按数据库里记下的下载器把种子对到对应的下载器(按下载器编号认,下载器改名也认得出)
- 不会出现下载器 A 的种子被当作下载器 B 的种子处理的情况
常见配置示例
场景 1:日常刷流(推荐)
适合大多数用户的保守配置:
| 配置项 | 值 |
|---|---|
| 管理范围 | 仅本应用推送的种子 |
| 条件关系 | OR |
| 做种时间 | 72 小时 |
| 分享率 | 2.0 |
| 其他免费种子免费过了没下完就删 | 开 |
| 保护 H&R | 开 |
| 最短保种时间 | 24 小时 |
| 磁盘保护 | 开,最低 50 GB |
场景 2:磁盘空间紧张
优先保证磁盘不满:
| 配置项 | 值 |
|---|---|
| 管理范围 | 仅本应用推送的种子 |
| 条件关系 | OR |
| 做种时间 | 48 小时 |
| 分享率 | 1.0 |
| 不活跃时间 | 24 小时 |
| 磁盘保护 | 开,最低 50 GB |
场景 3:追求高分享率
只有充分利用后才删除:
| 配置项 | 值 |
|---|---|
| 管理范围 | 仅本应用推送的种子 |
| 条件关系 | AND |
| 做种时间 | 168 小时(7 天) |
| 分享率 | 3.0 |
| 保护 H&R | 开 |
| 最短保种时间 | 48 小时 |
| 磁盘保护 | 开,最低 100 GB |
AND 模式下,种子必须同时做种超过 7 天且分享率达到 3.0 才会被删除。 建议搭配磁盘保护并设置较大的保底空间,防止高分享率目标导致种子大量堆积撑满硬盘。
暂存种子文件清理(.torrent 中间文件)
注意区分:本节说的是 pt-tools 本地暂存目录里的
.torrent中间文件,不是上面「自动删种」管理的 qBittorrent 做种任务。两者是完全独立的两套清理机制。
清理对象
RSS 下载种子后,会先把 .torrent 文件写入本地暂存目录({下载目录}/{tag}/,文件名形如 siteName-torrentID.torrent),再推送给下载器。长期运行下,如果某些种子一直推送失败、被跳过或者对应的 RSS 订阅已经不再处理,这些暂存文件会不断堆积,占用磁盘(对应 Issue #450)。
本节描述的清理机制,只针对这些本地暂存的 .torrent 文件,不会触碰下载器里的任何数据。
触发时机
每个站点每轮 RSS 推送任务结束时自动执行一次,不需要单独开启「自动删种」总开关。无论本轮推送是正常处理完全部种子、因磁盘保护中途停止,还是因为部分种子过大被跳过,清理都会执行(内部通过 defer 保证)。
清理策略
遍历暂存目录中该站点的 .torrent 文件,逐个判断,满足以下任一条件即删除:
| 条件 | 说明 |
|---|---|
| 数据库中无对应记录 | 孤立文件,直接删除 |
| 数据库中已标记为推送成功(已推送) | 属于推送后的残留副本,删除 |
| 重试次数已达最大重试次数 | 判定为不可恢复,删除 |
| 未推送,但文件修改时间超过「保留时长」 | 长期卡在待推送状态,视为老化文件,删除 |
| 未推送,且文件较新(仍在保留期内) | 仍在正常重试窗口,保留 |
为什么用文件 mtime 而不是数据库的最后检查时间:RSS 每轮任务都会刷新数据库里种子的最后检查时间,如果按这个字段判断老化,会导致"每轮都被看到、但一直推送不出去"的种子永远不会老化,这正是历史堆积问题的根因。改用文件系统的修改时间后,已经堆积很久的旧文件在下一轮任务里就能被正确识别并清理。
配置项
复用「全局设置」→「暂存种子清理」中已有的暂存种子保留时长(小时)(RetainHours,默认 24 小时)作为暂存文件的老化阈值,无需额外配置。
- 保留时长设为
0时,暂存清理关闭,保持旧版本行为,向后兼容。 - 其他数值下,文件修改时间早于「当前时间 - 保留时长」即视为老化。
边界与安全说明
- 暂存清理只删除本地
.torrent中间文件,绝不会删除下载器中已下载或正在做种的数据。即使某个文件在数据库里标记为已推送,删除的也只是本地这份暂存副本,下载器里的任务不受影响。 - 已知局限:暂存清理挂在 RSS 推送流程上执行。如果某个站点的 RSS 订阅已被删除或停用,其对应目录下遗留的
.torrent不会再有任务触发清理,需要手动删除,或者重新添加该 RSS 订阅以触发一次清理。
与超大种子跳过的关联
Issue #450 同时修复了"超大种子触发磁盘保护后会阻塞后续种子推送"的问题:现在遇到超大种子会跳过并继续处理剩余种子(原因记录在种子的 last_error 中),不再中断整轮推送。被跳过的种子对应的 .torrent 会保留在暂存目录中,等待磁盘空间恢复后重试,最终同样由上述 mtime 老化机制清理。
工作目录统一清理(.pt-tools)
与前两节的区别:上面的「自动删种」管理的是下载器里的做种任务;「暂存种子文件清理」挂在单个站点的 RSS 推送流程上、只处理当前订阅的 tag 目录。本节的「工作目录统一清理」是一套独立的、按需触发的机制,一次性清理整个
~/.pt-tools工作目录下堆积的日志、暂存种子、旧备份,并扫描downloads下的全部 tag 子目录(不依赖当前是否还有对应的 RSS 订阅),补上了「订阅删除后残留目录够不到」的清理盲区。
清理对象
统一清理只在 ~/.pt-tools 工作目录下三个固定白名单目录内操作:
| 类别 | 目录 | 清理内容 |
|---|---|---|
logs | ~/.pt-tools/logs | 已轮转的日志备份(all-*.log、debug-*.log.gz 等),保留策略与日志滚动配置(保留份数/天数)一致 |
staging | ~/.pt-tools/downloads | 该目录下所有 tag 子目录里已无意义的 .torrent(已推送/孤立/达最大重试/超保留期) |
backups | ~/.pt-tools/backups | 旧的配置备份 *.json,按修改时间倒序保留最近 N 份(默认 5),其余删除 |
staging 类别的判定规则与「暂存种子文件清理」相同(复用 RetainHours / MaxRetry 配置;RetainHours<=0 时改用默认的 24 小时,该类别不会关闭),差别在于统一清理扫描的是白名单根 ~/.pt-tools/downloads 下的全部 tag 子目录,而不局限于当前 RSS 订阅。
红线:绝对不会删除的文件
以下文件是硬编码红线,无论在哪个类别、无论何种参数,都永远不会被删除:
- 数据库:
torrents.db及其torrents.db-wal、torrents.db-shm - 加密密钥:
secret.key(丢失将导致所有站点 cookie 无法解密) - 正在写入的日志 base 文件:
all.log、debug.log、info.log、error.log(只删轮转出来的备份,不删正在写入的本体)
此外还有一条目录红线:如果你把「全局设置」里的「种子下载目录」(DownloadDir)配成了 ~/.pt-tools 之外的绝对路径(例如挂载的数据盘),统一清理一律不碰那个目录——staging 清理的扫描根固定是 ~/.pt-tools/downloads,绝不读取 DownloadDir 配置来扩大清理范围。
两个入口
命令行:pt-tools clean
| 参数 | 默认值 | 说明 |
|---|---|---|
--dry-run | true | 预览模式,只列出将删除的文件而不实际删除 |
--confirm | false | 确认执行真实删除(破坏性操作,未加此项时一律只预览、不删除) |
--category | 空 | 限定清理类别 logs,staging,backups,逗号分隔;留空表示全部三类 |
--keep-backups | 5 | backups 类别保留的最近份数 |
# 预览将清理的内容(默认,安全,不会删除任何文件)
pt-tools clean
# 只预览 logs 类别
pt-tools clean --category logs
# 真实删除(破坏性,需显式确认)
pt-tools clean --confirm
# 真实删除并保留最近 10 份备份
pt-tools clean --confirm --keep-backups 10若显式要求真实删除(
--dry-run=false)却没有加--confirm,命令会拒绝执行并提示需要--confirm确认,避免误删。
Web 界面:/cleanup 页「清理工作目录」
在 Web 管理界面「规则 → 自动清理」页面底部的「清理工作目录 (.pt-tools)」卡片:
- 勾选要清理的清理项(日志文件 / 暂存种子文件 / 旧配置备份,默认全选)
- 设置「保留最近备份数量」(默认 5;填
0时也按 5 份保留) - 点击「预览可清理项」→ 以表格展示各类别可删除数量与可释放空间,并标注受保护/跳过项(此时不会删除任何文件;预览总是覆盖全部三类,并按保留 5 份备份计算)
- 点击「立即清理」→ 弹出二次确认框(明确提示数据库、密钥等受保护项不会被删除、操作不可撤销)→ 确认后才真正删除,并展示删除结果
安全机制
统一清理默认以最安全的方式运行,每一次删除都要通过多重校验:
- 默认不删:CLI 默认
--dry-run(只预览);Web 端「预览优先」,可以先预览,真正删除必须显式点击「立即清理」并二次确认。 - 白名单校验:每一个候选删除路径都会先
EvalSymlinks解析软链,再用filepath.Rel判定是否仍落在三个白名单根之内;越界(..逃逸、绝对路径逃逸)即拒绝并记录,绝不删除。 - 允许根自身的软链防护:三个白名单根本身也会先解析软链——如果某个根(例如
downloads)被做成了指向外部盘的软链、解析后越出~/.pt-tools,则该类别整体拒绝清理并记录告警,绝不在其下删任何文件。 - 红线二次保险:即使某个候选侥幸落在白名单内,还会再叠加一次红线文件名校验(
torrents.db/wal/shm、secret.key、日志 base 文件),命中即拒绝。 - 单文件失败不中断:任何单个文件因命中红线或越界被拒绝,只会记录到「跳过」项,不会中断本次其余文件的清理。
相关文档: