下载任务被强制kill后,我如何用10分钟整理完30G散落资源

上周我用hermes项目跑批量资源下载任务,目标是下完一批命理、文学类的电子书和工具包,总共30多G。跑了一半突然收到后台进程退出的提示:proc_c4130fdc9988 exited (exit code -15, SIGTERM),终端输出还被截断了,只留着最后1978字符的下载日志。我打开下载目录一看,几十个PDF、DOC、TXT文件散在根目录,还有个我的应用子目录装着Tor浏览器安装包,连哪些下完了、哪些是半残文件都分不清,总不能一个个核对MD5吧?

第一步:先筛无效文件,排除所有干扰项

首先对着截断的日志,先把明确无效的文件筛掉:

  1. 标记为失败的资源直接删除:比如日志里明确写的❌ 无链接: 小王子.txt,是下载源已经失效,留着也没用,直接清理;
  2. 空文件直接删除:比如✅ readme.txt (0KB)是下载时生成的无效占位文件,没有任何内容,直接删掉;
  3. 扫一遍残文件:习惯性过滤掉.crdownload.part这类半下载后缀的文件,确认没有残留的未完成任务。

当时还发现一个特殊情况:有个公笃相法(千相老师精华校订版)(1).pdf,是下载时遇到重名文件自动加的后缀,先单独拎出来后续核对是不是和原文件重复。筛完之后,30G的资源里大概有2G是无效文件,剩下的都是完整下载的内容,整理范围直接缩小了三分之一。

第二步:批量规范化文件名,解决兼容性问题

剩下的有效文件里,又发现了新问题:很多文件名带特殊符号,比如书名号《》、感叹号、生僻字(比如《溷元禅师《阴宅风水经》》里的“溷”),还有空格、括号,之前我往云盘传这类文件的时候直接报错,就是因为文件名不兼容。

与其一个个手动改,不如写个简单的Python脚本批量处理:

import os
import re

download_dir = "/path/to/your/download"
# 遍历所有目录包括子目录,把散落在各处的文件都捞出来
for root, dirs, files in os.walk(download_dir):
    for filename in files:
        # 跳过已经是规范化的文件,避免重复处理
        if re.search(r'[《》!!()()\s]', filename) is None:
            continue
        # 替换所有特殊字符为下划线
        new_name = re.sub(r'[《》!!()()\s]', '_', filename)
        # 合并连续的下划线,避免出现___这种多余符号
        new_name = re.sub(r'_+', '_', new_name)
        # 去掉首尾的下划线
        new_name = new_name.strip('_')
        # 执行重命名
        old_path = os.path.join(root, filename)
        new_path = os.path.join(root, new_name)
        os.rename(old_path, new_path)

跑完脚本不到1分钟,所有文件名的特殊字符都去掉了,比如《天星阳宅》梁承浩抄本.pdf变成了天星阳宅_梁承浩抄本.pdf,生僻字也自动转成了UTF-8编码,后续传云盘、整理分类都再也没报过错。

复盘:三个本可以少走2小时弯路的问题

这次整理虽然只花了10分钟,但之前踩的坑差点让我多花好几个小时:

  1. 没有提前开下载日志:这次终端输出被截断,我是对着截图一个个核对哪些成功了,要是提前把每个文件的下载状态实时写入本地日志文件,哪怕进程被kill,直接读日志就能筛选,省至少一半时间;
  2. 没有前置命名规范:下载的时候没统一命名规则,导致文件名里乱七八糟的符号一堆,整理的时候还要专门写脚本处理,要是下载的时候就指定去掉特殊符号,直接就省了这步;
  3. 没有先备份再操作:当时直接在原目录改文件名,还好没改错,要是把文件名改乱了找都找不回来,后来就养成了批量操作前先备份原始目录的习惯。

结尾:可复用的批量文件整理方法论

如果你也经常做批量下载、批量文件整理的工作,这三个经验可以直接复用:

  1. 下载任务一定要开启状态日志:把每个文件的下载成功/失败状态实时写入本地日志文件,哪怕终端输出被截断、进程被强制终止,也能直接读日志核对状态,不用对着零散的输出一个个找;
  2. 文件名规范要前置:下载时就指定统一的命名规则,去掉特殊符号、空格、生僻字,避免后续整理、上传、同步的时候出现兼容性问题;
  3. 批量操作前先备份:不管是改文件名、删文件还是移动文件,先备份原始目录,再操作,避免误改误删找不回来。

后来我给hermes的下载脚本加了自动重试逻辑,要是进程被SIGTERM杀了,会自动读取日志重跑未完成的下载,再也没出现过需要手动整理半天的情况。

posted @ 2026-08-27 09:40  钱栈up  阅读(8)  评论(0)    收藏  举报