Skip to content

lucaluo925/mac-cleanup

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mac-cleanup

一个面向中文用户的 macOS 终端清理工具。默认 dry-run,永不 rm -rf,一切先走废纸篓。

macOS Python License Status


简介

mac-cleanup 是一个跑在终端里的 macOS 安全清理工具。它扫描常见的可回收空间(开发缓存、浏览器缓存、旧下载、Xcode 中间产物等),按风险分级展示,由你逐项确认后移动到废纸篓——不调用 rm,不绕过废纸篓,不自动执行任何破坏性操作。

设计目标只有一句话:256GB 的 Mac,清理空间的时候不应该让人提心吊胆。

$ python3 main.py
╭───────────────────── 欢迎 ─────────────────────╮
│ Mac 安全清理工具                               │
│ 本工具只通过「移动到废纸篓」方式清理,永不调用 rm。
│                                                │
│ 当前模式:DRY-RUN(演练模式)                  │
│ 本次运行 不会移动或删除任何文件                │
│ 如需真实清理,请退出后使用:                   │
│   python main.py --apply                       │
╰────────────────────────────────────────────────╯
磁盘容量:228.27GB   已使用:225.42GB   可用:2.85GB

为什么做这个

256GB MacBook 是个尴尬的容量。Xcode 一装,Homebrew 一开,node_modules 一长,可用空间就一直在 10GB 上下徘徊。

我用过的清理方案大致是这两类:

  • 商业 App(CleanMyMac、Sensei 等):界面好看,订阅制,闭源。不知道它到底删了什么、是否能恢复。
  • 「复制这段到终端」式脚本:很多直接 rm -rf 几个目录,没有 dry-run,没有日志,删完不可逆。

想要一个写得像项目而不是脚本的东西:模块化、有日志、有路径校验、默认 dry-run、所有动作都走废纸篓、所有破坏性操作都要明确确认。mac-cleanup 就是这个东西。


功能

  • ✅ 终端交互,全中文界面
  • ✅ 默认 dry-run,看清楚再决定
  • ✅ 风险三级(安全 / 中等 / 高),分级控制
  • ✅ 内置 13 类清理规则:npm / yarn / pip / Homebrew / Xcode / 浏览器 / Slack / Discord / Spotify / Adobe / iOS 模拟器 / 废纸篓 / 旧下载等
  • ✅ 大文件分析(>=1GB,仅展示)
  • ✅ 全部删除走 send2trash,可在 Finder 恢复
  • ✅ JSONL 删除日志,可审计
  • ✅ 路径白名单 + 黑名单双校验,扫描时和执行前各一次
  • ✅ Apple Silicon / Intel 双架构
  • ✅ macOS Ventura / Sonoma / Sequoia

安全设计

清理流程穿过 6 道关卡,缺一则操作终止:

# 关卡 实现位置 作用
1 风险分类 categories.py SAFE / MEDIUM / HIGH 三级。HIGH 永不进入删除流程;MEDIUM 默认锁定
2 路径白名单 safety.py 解析后路径必须严格位于 $HOME 之内
3 路径黑名单 safety.py 等于或包含 ~/Documents~/Desktop~/Library~/.sshKeychains、iCloud Drive、Photos Library 等任一项 → 拒绝
4 dry-run 默认 cli.py 不加 --apply,第 6 步整段跳过
5 YES 二次确认 cli.py 必须精确输入大写 YES;中风险还需先输入 continue
6 执行前复检 cleaner.py 调用 send2trash 之前再跑一次 is_safe_to_delete

不会做的事

  • ❌ 不调用 rmrm -rfos.removeshutil.rmtree
  • ❌ 不绕过废纸篓
  • ❌ 不触碰 ~/Documents / ~/Desktop / ~/Pictures / ~/Movies
  • ❌ 不触碰 iCloud Drive、Photos Library、Keychains、SSH 密钥
  • ❌ 不在缺少 --apply 时执行任何真实删除
  • ❌ 不在缺少 YES 时移动任何文件

安装

方式 A:克隆仓库

git clone https://github.com/<your-name>/mac-cleanup.git
cd mac-cleanup
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

方式 B:一键脚本

仓库里有 setup.sh,可放在桌面运行:

chmod +x setup.sh
./setup.sh

会在 ~/Desktop/mac-cleanup 写入全部源码、创建虚拟环境、装好依赖。


使用

默认:dry-run,仅扫描

python3 main.py

会完整跑一遍 扫描 → 选择 → 输入 YES 的流程,但任何 YES 都不会真正移动文件。所有「将要删除」的路径会写入 dry-run 日志,便于事后审查。

真实清理

python3 main.py --apply

启用真实执行。仍然:

  1. 默认只能选「安全」分类
  2. 每次操作前要看完完整路径清单和汇总
  3. 必须输入 YES 才会动手
  4. 全部走 send2trash,文件落到废纸篓,可手动恢复

同时启用中等风险

python3 main.py --apply --allow-medium

解锁中风险分类(~/Library/Caches 合集、废纸篓、Spotify 缓存、30 天未访问的 Downloads 等)。执行前会额外要求输入 continue,然后才进入 YES 确认。


风险等级

等级 默认行为 例子
🟢 安全 --apply 后可选 npm / yarn / pip / Homebrew / Xcode DerivedData / Xcode 旧日志 / 浏览器缓存 / 用户日志
🟡 中等 锁定,需 --allow-medium + continue + YES ~/Library/Caches 全集、废纸篓、Slack/Discord/Telegram/Spotify 缓存、30 天未访问的 Downloads、DMG 安装包、iOS 模拟器/DeviceSupport、Adobe 缓存
🔴 高风险 永远只展示,工具内无法清理 iPhone 本地备份

实际清理示例

某台 256GB MBP 上,仅 SAFE 分类一轮:

npm 缓存                  3.79 GB
浏览器缓存                2.04 GB
Xcode DerivedData         492 MB
Homebrew 下载缓存         289 MB
pip 缓存                  201 MB
用户日志                   38 MB
────────────────────────────────
合计                      ~6.8 GB

再加上 --allow-medium

+ 用户缓存合集             5.80 GB
+ 30 天未访问 Downloads    6.18 GB
+ DMG 安装包               3.83 GB
+ iOS 模拟器               3.73 GB
────────────────────────────────
总计可释放                ~26 GB

日志与恢复

日志

每次会话写入两个文件:

~/.mac-cleanup/logs/
├── session-YYYYMMDD.log              # 标准日志
└── deletions-YYYYMMDD-HHMMSS.jsonl   # 每个被处理项一行

JSONL 每条记录的 phase 字段可能是:

phase 含义
dry-run dry-run 模式下的演练记录
attempt 真实模式即将调用 send2trash
trashed 成功移动到废纸篓
rejected 被安全规则拒绝
failed 系统层面失败(权限、占用)

恢复

所有「删除」实际是「移动到废纸篓」:

  1. 访达 → 废纸篓
  2. 右键文件 → 放回原处

只要没清空废纸篓,恢复永远可行。


项目结构

mac-cleanup/
├── main.py                # CLI 入口(argparse)
├── requirements.txt
├── setup.sh               # 一键安装脚本
└── cleanup/
    ├── cli.py             # 中文终端 UI(rich)
    ├── scanner.py         # 扫描引擎(只读)
    ├── cleaner.py         # 执行删除(send2trash)
    ├── analyzer.py        # 大文件分析
    ├── categories.py      # 分类定义 + 风险分级
    ├── safety.py          # 路径校验
    ├── logger.py          # 文件日志 + JSONL 流水
    └── utils.py           # 通用工具

Roadmap

  • Phase 1 — 终端 MVP(当前版本)
  • Phase 2 — 重复文件检测、目录树可视化、单元测试覆盖 safety 模块
  • Phase 3 — PyQt6 图形界面
  • Phase 4.app 打包、代码签名、公证

License

MIT

About

Safety-first macOS cleanup CLI — dry-run by default, never calls rm, every deletion goes through Trash. 面向中文用户的安全 Mac 清理工具。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages