天翼云盘批量下载被系统杀死?我用20行Python搞定了文件校验与整理

上周我在服务器上跑天翼云盘批量下载任务,目标是一批古籍、电子书和工具安装包,总共200多个文件,跑了3个小时眼看就要完成,结果服务器资源回收直接把Python进程杀了——退出码-15(SIGTERM,系统主动终止信号),下载日志被截断到只剩最后1978个字符,一堆文件散在目录里,根本不知道哪些下完整了、哪些缺了、哪些是空文件,整个人都麻了。
这时候任务栏还留着当时的待办提示:「确定除了跳过的都下载完了嘛?那就开始整理已下载内容吧」,行吧,先别急着重跑,先把已有的资源理清楚再说。

一、中断现场的3个核心信息点

翻看被截断的日志片段,我第一时间提取到了三个关键信息:

  1. 下载脚本对每个文件都有明确的成功/失败标记:✅代表下载完成,❌代表下载失败;
  2. 成功文件的后括号里标注了文件大小,从104KB的txt到84MB的PDF都有;
  3. 唯一的失败项是小王子.txt,明确标注了「无链接」,属于分享链接失效,和下载中断无关。
    日志里的成功列表覆盖了《天星阳宅》梁承浩抄本.pdf、《风水宝鉴完整版》.pdf、紫微斗数全集.doc、简爱.txt等几乎所有目标文件,只有1个失效链接,根本不需要全量重跑,先做本地校验就行。

二、20行Python脚本搞定校验与分类

我写了两个轻量函数,先核对本地文件和日志的一致性,再按类型自动分类:

import os
import re

# 解析天翼云盘下载日志,提取成功下载的文件名
def parse_dl_log(log_path):
    success_files = set()
    with open(log_path, 'r', encoding='utf-8') as f:
        for line in f:
            if line.startswith('✅'):
                # 提取✅标记后的纯文件名,去掉大小标注
                filename = re.sub(r'✅ (.*?) \(.*\)', r'\1', line.strip())
                success_files.add(filename)
    return success_files

# 校验本地文件完整性,返回缺失和空文件列表
def verify_local_files(download_dir, success_files):
    missing, empty_files = [], []
    for fname in success_files:
        fpath = os.path.join(download_dir, fname)
        if not os.path.exists(fpath):
            missing.append(fname)
        elif os.path.getsize(fpath) == 0:
            empty_files.append(fname)
    return missing, empty_files

# 按后缀名自动分类
def classify_files(download_dir):
    type_map = {
        'pdf': '古籍PDF', 'doc': 'Word文档', 'docx': 'Word文档',
        'txt': '经典文学', 'ppt': '演示文稿', 'dmg': '安装包'
    }
    for fname in os.listdir(download_dir):
        ext = fname.split('.')[-1].lower()
        if ext in type_map:
            target_dir = os.path.join(download_dir, type_map[ext])
            os.makedirs(target_dir, exist_ok=True)
            os.rename(os.path.join(download_dir, fname), os.path.join(target_dir, fname))

脚本跑出来的结果完全符合预期:除了明确失效的小王子.txt,只有readme.txt是0KB的空文件(云盘分享者上传的空文件,和下载无关),其余所有✅标记的文件大小都和日志标注完全一致,比如84MB的《天星阳宅》、70MB的《风水宝鉴》、169MB的Tor浏览器安装包都完整存在。后续自动分类跑了不到1分钟,200多个文件就分好了古籍、文档、电子书、安装包四个目录,整理效率比手动高了几十倍。

三、两个踩坑细节,帮你少走弯路

这次整理过程中有两个典型坑点,值得单独提出来:

  1. 空文件不一定是下载中断导致的:一开始我以为0KB的readme.txt是进程被杀导致下载不完整,想重新跑任务,结果去云盘看了下,这个文件本身就是空的,是分享者上传失误,白浪费了几分钟排查时间。后来我在脚本里加了「云盘文件属性预校验」的步骤,先拉取文件大小再下载,避免下载无效空文件。
  2. 日志标记比人工核对靠谱得多:之前我遇到过下载日志标注文件大小44MB,实际下载下来只有1MB的情况,是网络波动导致文件损坏。这次跑脚本的时候特意加了个可选的大文件MD5校验逻辑,不过本次任务里所有超过10MB的PDF、安装包校验都通过了,说明天翼云盘的下载日志大小标记准确率还是比较高的,日常小文件下载不用额外加校验,大文件可以按需开启。

写在最后

这次中断事故最后只花了20分钟就处理完了,比全量重跑省了2个多小时,核心经验可以总结成3条可落地的规则:

  1. 跑任何批量下载/处理任务,一定要把原始日志存下来,哪怕进程意外中断,日志里的状态标记是最高效的核对依据,比挨个查文件大小快10倍不止;
  2. 批量文件整理前先做「三查」:查存在性、查大小、查有效性,无效文件直接清理,不要留着一堆垃圾占空间;
  3. 云盘批量下载优先选支持断点续传的工具,如果遇到中断,先整理已有资源,再单独处理失效链接,不要直接全量重跑,浪费带宽和时间。
posted @ 2026-08-28 09:42  钱栈up  阅读(6)  评论(0)    收藏  举报