一个简单的脚本,治好了我的下载文件夹焦虑症 0 次阅读

事情是这样的

前两天想找个上周下载的发票,结果在下载文件夹里翻了半天。

满屏都是这玩意儿:

  • 新建文本文档 (3).txt
  • image_20260825_172341.png
  • 最终版_真的不改了_v7.pdf
  • 一堆乱码的压缩包.zip

我当场就破防了。

为了“效率至上”的信仰,连个下载文件夹都管不好,说出去都丢人。

于是决定花点时间,彻底解决这个问题。

需求很简单

我就想要一个脚本,每次运行的时候,自动把下载文件夹里的文件按类型分到不同子目录里:

  • 图片 → Pictures/
  • 文档(PDF、Word、Excel)→ Documents/
  • 压缩包 → Archives/
  • 安装包(exe、dmg)→ Installers/
  • 代码文件 → Codes/
  • 其他 → Others/

而且不能动那些还在下载中的临时文件(比如 .crdownload),别给人家整坏了。

开工

Python 写这种小脚本真的舒服。核心就三步:

  1. 遍历文件夹
  2. 根据扩展名判断类型
  3. 移动文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import os
import shutil

DOWNLOAD_DIR = os.path.expanduser("~/Downloads")

RULES = {
"Pictures": [".jpg", ".jpeg", ".png", ".gif", ".webp", ".bmp"],
"Documents": [".pdf", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".txt"],
"Archives": [".zip", ".rar", ".7z", ".tar", ".gz"],
"Installers": [".exe", ".msi", ".dmg", ".pkg"],
"Codes": [".py", ".js", ".html", ".css", ".cpp", ".c", ".go", ".rs"],
}

def get_category(filename):
ext = os.path.splitext(filename)[1].lower()
for category, exts in RULES.items():
if ext in exts:
return category
return "Others"

def organize():
for item in os.listdir(DOWNLOAD_DIR):
path = os.path.join(DOWNLOAD_DIR, item)
if os.path.isfile(path) and not item.startswith("."):
# 跳过未下载完的文件
if item.endswith(".crdownload") or item.endswith(".tmp"):
continue
category = get_category(item)
target_dir = os.path.join(DOWNLOAD_DIR, category)
os.makedirs(target_dir, exist_ok=True)
shutil.move(path, os.path.join(target_dir, item))
print(f" {item}{category}/")

if __name__ == "__main__":
organize()

就这么点代码,甚至没写注释(好孩子别学)。

用起来什么感觉

第一次运行的时候,看着终端里一行一行刷过去的文件名,有种“家里终于被保洁阿姨收拾干净”的爽感。

之后再下载东西,隔几天跑一次这个脚本,下载文件夹永远整整齐齐。

还可以把脚本顺手把它加到了 crontab 里,每周日凌晨自动跑一次,完全无感知。

1
0 3 * * 0 cd /path/to/script && python3 organize_downloads.py

现在的下载文件夹长期保持清爽,再也不怕别人借我电脑时看到那一堆“新建文件夹”了。

还能玩出什么花

如果你觉得光按扩展名分类太粗犷,还可以:

· 按日期建子文件夹(比如 2026-08/)
· 识别图片尺寸,把截图和壁纸分开
· 对 PDF 用 PyPDF2 读取标题,自动重命名
· 甚至识别文件 hash,自动去重

不过,够用就行。再复杂就变成一个项目了,为了整理文件再搭个数据库(笑)。

最后说两句

这个脚本总共就 40 来行,但解决了咱困扰的问题,兴趣爱好是最好的老师。

有时候不一定非要搞个大新闻,写点小东西让日常生活舒服一点点,也挺有成就感的。

如果你也有类似的需求,直接复制上面的代码,把 DOWNLOAD_DIR 改成你自己的路径就能用。

试试看,还你一个干净的下!载!文!件!夹!

感谢阅读,么么哒~

下一篇 利用 Cloudflare Workers 免费搭建自己的短链服务
感谢您的支持!
微信赞赏码 微信赞赏
支付宝赞赏码 支付宝赞赏