一、痛点:下载文件夹永远是一团乱麻
几乎每个人的电脑里,Downloads 文件夹都住着一群"幽灵文件":三个月前的发片 PDF、上周从群里扒下来的表情包、某个框架的安装包、一份没来得及看的行业报告,还有十几个名字像 document(12).zip 的压缩包。
手动整理?每次打开文件夹都告诉自己"等周末",然后周末又没了。更糟的是,当你真正要找那份合同扫描件时,Windows 的搜索要索引半天,文件名还记不全。
坊间流传着一堆"文件管理神器",要么收费,要么规则写起来比整理还累。直到把这件事交给 WorkBuddy——它不只是聊天,能直接读磁盘、跑脚本、生成文件。用一顿午饭的时间,搭了一套"自动归类 + 自动出索引"的流水线,现在每周自动跑一次,下载文件夹再也没乱过。
二、方案架构:WorkBuddy 当"整理大脑",本地脚本当"手"
整套方案分三层:
- 规则层(你定义):哪些后缀归到"文档"、哪些是"安装包"、哪些按来源日期分桶。规则用一份 JSON 存着,随时改。
- 执行层(Python 脚本):WorkBuddy 调用本地 Python 扫描下载目录,按规则移动到对应子文件夹,并生成一份 Markdown 索引。
- 产出层(索引文件):
Downloads/索引_2026-07-30.md,按类别列出每个文件的名字、大小、修改时间、移到了哪。
关键点:文件不删除、不重命名,只"移动归类",所以再怎么整理都不会误删数据。索引里保留原文件名,搜索时一眼定位。
三、复制即用的步骤
第 1 步:写一份归类规则 rules.json
{
"docs": [".pdf", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".txt", ".md"],
"images": [".png", ".jpg", ".jpeg", ".gif", ".webp", ".svg"],
"archives":[".zip", ".rar", ".7z", ".tar", ".gz"],
"installers":[".exe", ".msi", ".dmg", ".apk", ".deb"],
"media":[".mp4", ".mov", ".mp3", ".wa v", ".flac"]
}
第 2 步:让 WorkBuddy 跑这个归类脚本 organize.py
import os, json, shutil, hashlib
from datetime import datetime
DOWNLOADS = os.path.expanduser("~/Downloads")
RULES = os.path.join(DOWNLOADS, "rules.json")
INDEX = os.path.join(DOWNLOADS, f"索引_{datetime.now():%Y-%m-%d}.md")
with open(RULES, encoding="utf-8") as f:
rules = json.load(f)
def classify(ext):
for cat, exts in rules.items():
if ext.lower() in exts:
return cat
return "others"
rows = []
for name in os.listdir(DOWNLOADS):
p = os.path.join(DOWNLOADS, name)
if os.path.isdir(p) or name in ("rules.json",) or name.startswith("索引_"):
continue
ext = os.path.splitext(name)[1]
cat = classify(ext)
dest = os.path.join(DOWNLOADS, cat)
os.makedirs(dest, exist_ok=True)
# 同名防覆盖:加哈希后缀
target = os.path.join(dest, name)
if os.path.exists(target):
h = hashlib.md5(open(p,'rb').read()).hexdigest()[:6]
target = os.path.join(dest, f"{os.path.splitext(name)[0]}_{h}{ext}")
shutil.move(p, target)
size = os.path.getsize(target) // 1024
rows.append((cat, name, f"{size}KB", datetime.fromtimestamp(os.path.getmtime(target)):%Y-%m-%d))
with open(INDEX, "w", encoding="utf-8") as f:
f.write("# 下载文件索引\n\n")
for cat in dict(rules):
items = [r for r in rows if r[0] == cat]
f.write(f"## {cat}({len(items)})\n")
for _, n, s, d in items:
f.write(f"- {n} — {s} — {d}\n")
print(f"已归类 {len(rows)} 个文件,索引写入 {INDEX}")
第 3 步:把"每周自动跑"交给 WorkBuddy 自动化
在 WorkBuddy 里建一个每周任务,prompt 就一句话:
每周日 23:00,用 Python 运行
C:/Users/你的名/Downloads/organize.py,如果rules.json缺失就从模板重建,最后把生成的索引文件摘要发到我的企业微信。
WorkBuddy 会自己调起 Python、读结果、推送通知。你什么都不用管。
四、踩过的坑(都是真金白银的教训)
- 别用
os.rename跨盘移动:如果Downloads在 C 盘、你想归到 D 盘,Python 的rename会报"跨设备"错误。老老实实用shutil.move,它会自动判断是拷贝还是移动。 - 同名文件会互相覆盖:群里反复下的"报价单.pdf"会有好几个。脚本加了 MD5 短哈希后缀,既保留版本又不覆盖,索引里也能看出区别。
- 规则别贪多:一开始把
.log、.tmp也写进规则,结果把系统临时文件也挪走了,某个软件启动报错。后来只保留"看得见价值"的类型,临时文件留在原地。 - 索引别放进扫描范围:生成索引的
.md文件本身也在 Downloads 里,要在脚本里startswith("索引_")排除,否则下次运行会把索引也当成"文档"搬走,无限套娃。
五、实测效果
跑了三周,下载文件夹从平均 200 多个散文件,变成 6 个整齐的子目录(docs / images / archives / installers / media / others)。找文件的时间从"搜半天"变成"打开对应分类文件夹,按修改时间排一下"。
最关键的是:这件事彻底从待办清单里消失了。WorkBuddy 每周自动整理 + 自动发索引摘要,只需要偶尔看一眼"others"里有没有新类型要加规则。
六、一句话总结
文件整理这种"高频、机械、低决策"的活,最适合交给会读磁盘、会跑脚本、还能定时自动干的 AI 助手。你定规则,它动手,索引自动出——下载文件夹从此不再失控。

