disktree 界面完全解读:颜色、斜纹与图例如何帮你看懂谁在偷走磁盘空间
【免费下载链接】disktreeA treemap for finding and removing what fills your disk, for Omarchy. Rust + GPUI.项目地址: https://gitcode.com/gh_mirrors/di/disktree
disktree 是一款用 Rust + GPUI 打造的磁盘空间可视化工具(treemap 矩形树图),它扫描你的目录后,把每个文件夹画成一块按真实占用大小缩放的色块——用颜色区分数据类型、用斜纹标记可回收空间、用图例随时对照,再配合右侧面板实时显示磁盘剩余空间,帮你快速找出并清理占满磁盘的东西。
下面这张截图来自项目自带的示例,跟着它把界面从上到下过一遍,你就掌握了 disktree 的"读图法"。
界面总览:四大区域各司其职
顶部:导航路径与测量模式
最上面一行显示从/开始的面包屑路径(截图中是/ home / tobi),点击任意一段可以回到上级目录,甚至把扫描范围扩大到更宽的目录。
路径右侧是几个开关:
- Size / Files / Age:按占用大小、文件数量或文件年龄排序,按
t键可切换前两者; - Hidden files:是否统计隐藏文件(默认开启,因为
~/.cache常常是主目录里最大的东西); - Apparent size:默认显示的是磁盘实际占用(
du报的数字),开启后才显示"表观大小"; - Depth:一次绘制多少层嵌套,按
[和]调整。
中上部:扫描摘要 + 图例
紧挨着的一行左边是扫描总计:881 GiB · 3.9M files · 499.4k dirs,一眼知道这次扫描覆盖了多大范围。右边就是后文重点讲的图例(legend)。
中央:彩色马赛克
主区域就是 treemap 本图:目录越占空间,色块越大,层层嵌套。每个顶层目录顶部有一条饱和色带和名称横幅,作为"封面色",方便在图例里对号入座。
右侧面板:决策所需的一切
面板自上而下是四块:
- SELECTION(当前选中):名称、总大小(大号显示)、占扫描范围的比例、文件数、最后写入时间,如果是一个 git 仓库还会显示未提交改动、stash 和未推送提交;
- WORTH A LOOK(值得一看):自动列出最大、且"删掉大概率没风险"的项目,比如构建产物、worktree、缓存,并标注原因(regenerable、build output 等);
- MARKED(已标记):你按空格标记待删的内容;
- DISK(磁盘):当前剩余空间,以及标记全部删掉之后的预计剩余空间——清理前就能预知战果。
颜色解读:8 种颜色对应 8 类数据
disktree 的颜色不表示"大小",而是表示这是什么数据。分类规则写在 classify.rs,图例顺序与之一致:
| 图例名称 | 数据种类 | 典型目录举例 |
|---|---|---|
| Code🧑💻 | 源码与项目 | src、projects、repos |
| Agent scratch | AI 助手的临时工作区 | .codex、worktrees、experiments |
| Toolchains | 编译器与包管理器 | .cargo、.rustup、.npm、.conda |
| Synced | 云同步客户端的目录 | Dropbox、Nextcloud、Mobile Documents |
| Git | 版本控制对象库 | .git、裸仓库(含objects/refs/HEAD结构的目录) |
| Media | 图片、视频、游戏、模型 | Pictures、Steam、.ollama |
| Documents | 文档、下载、桌面 | Documents、Downloads、obsidian |
| Cache | 缓存与可再生状态 | .cache、node_modules、DerivedData |
几个细节让这套配色更好读(实现见 palette.rs):
- 同一层级饱和度、明度一致:所有彩色块"音量"相同,不会某个类别天生更扎眼;
- 越深入颜色越亮:嵌套越深的色块明度微调,无需边框也能分辨层级;
- 未知目录会"继承":目录名不认识时沿用父目录的种类;顶层目录若名字陌生,则取最大可识别子目录的种类(例如一个叫
world的目录里几乎全是.git,它会被画上 Git 的颜色)。
Age 模式:颜色变成"最后修改时间"
切到Age后,颜色含义切换为最后写入时间,分成 5 档(见 AGE_BUCKETS):This week(本周)→ This month → Six months → This year → Older(更早)。最近动过的块颜色最浓,越久没动的越淡——找"半年没碰过的巨型文件夹"时非常顺手。
斜纹解读:独立于颜色的"第二维度"
仔细看截图:有些色块里盖着一层斜向条纹(hatch)——比如.cache、target构建目录、node_modules、同步盘的历史版本区。
斜纹回答的是另一个问题:"这块空间能不能收回来?"而颜色回答的是"这是什么"。两者刻意分开(设计初衷写在 palette.rs 的开头注释里),因为一个缓存目录可能属于任何颜色,但"可再生"这个事实与种类无关。
斜纹覆盖的范围由 classify.rs 的reclaim_of判定,包括:
- 可再生缓存:
.cache、__pycache__、Windows 的Temp、CrashDumps等——谁写的谁就能重写; - 构建产物:
target(仅当旁边有Cargo.toml时才算)、node_modules(旁边有package.json时)、.next、DerivedData; - 同步历史:Sync 类目录里的旧版本文件;
- 包管理器内容库:
.pnpm-store等; - 回收站与临时文件:
trash、$Recycle.Bin。
注意判断是有"上下文"的:target单独出现不算构建目录,只有挨着Cargo.toml才会打上斜纹——避免误判。
图例:颜色与斜纹的速查手册
图例就在扫描摘要的右边,由两部分组成(渲染代码见 views.rs):
- Reclaimable:一个带斜纹的小色块,永远排在最前,提醒"条纹 = 可回收";
- 8 个类别色块:每个是一个饱和色的小方块加英文名称。
图例会随模式联动:处于 Age 模式时,8 个类别色块替换为 5 档时间渐变色块。窗口太窄时图例从右端截断,但 Reclaimable 永远保留。
读图口诀很简单:先看斜纹找"能删的",再看颜色知道"它是什么",拿不准就扫一眼顶部图例。
琥珀色:唯一的高亮色
整张图上只有一个颜色是"响亮"的——琥珀色(warning amber)。它只用于三件事:
- 当前选中的色块与面板高亮;
- 主操作(键盘
enter做的事); - 可回收空间总计与清理后新增的剩余空间。
这是刻意保留的(palette.rs 称之为 "the one strong colour"):所有类别色都是低饱和的"背景音",只有琥珀色是"主唱",让眼睛第一时间锁定重点。
新手常见问题
Q:颜色分得不对怎么办?分类完全基于目录名和目录形状(见 classify.rs),不改文件内容。名字对不上的目录会取Other灰色,或继承父目录种类。
Q:为什么数字比ls -l看到的大?默认统计的是磁盘实际占用(st_blocks × 512),即删除后真正能收回的空间,这也是du的口径;ls -l显示的是表观大小。
Q:看到斜纹可以直接删吗?按空格标记后按c打开审核列表,逐项确认再提交;disktree 默认走"移入回收站",只有永久删除才会弹窗二次确认。
Q:快捷键在哪看?窗口底部有一排常驻提示(space标记、enter打开、c审核……),按?可以看完整键位表,详见 README.md。
结语:把"找空间"变成读图
disktree 的界面设计其实就一条主线:颜色回答"是什么",斜纹回答"能不能删",图例负责翻译,琥珀色负责指重点。学会这套读图法之后,面对几百 GiB 的磁盘,你不再需要一条一条翻目录——扫一眼斜纹最密的区域,配合右侧 "Worth a look" 的提示,几分钟就能把空间赎回来。
更多安装与命令行用法,可参考 README.md;分类规则若想扩展自己的目录名,改 classify.rs 里的名字表即可。
【免费下载链接】disktreeA treemap for finding and removing what fills your disk, for Omarchy. Rust + GPUI.项目地址: https://gitcode.com/gh_mirrors/di/disktree
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考