☰
disktree 终极指南:Rust + GPUI 打造的磁盘占用 Treemap 可视化神器,快速定位空间黑洞
2026/9/28 20:22:26 网站建设 项目流程

disktree 终极指南:Rust + GPUI 打造的磁盘占用 Treemap 可视化神器,快速定位空间黑洞

【免费下载链接】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 可视化工具:它扫描你的主目录(或任意目录),把每个文件夹画成一块按真实磁盘占用大小计算的马赛克拼块,让你一眼找出"空间黑洞",标记、审查并安全删除它们——整个过程中卷的剩余空间始终显示在侧边栏。

🎯 它解决什么问题

磁盘又满了,但不知道空间被谁吃掉?传统命令(如du)只给一堆数字,而 disktree 给你一幅"磁盘地图":

  • 大小即面积:目录越占空间,色块越大,嵌套层级一眼可见
  • 颜色即类型:代码、缓存、媒体、文档、工具链、Git 仓库等分类着色
  • 斜线即机会:带对角线斜纹的区域是可回收空间(缓存、同步历史、构建产物等)
  • 剩余空间实时可见:侧边栏显示当前剩余量、标记删除后的预估剩余量

一句话定位:像 du 一样精确,像图形界面一样直观,还能直接帮你删。

⚡ 快速安装

方式一:源码构建(推荐)

git clone https://gitcode.com/gh_mirrors/di/disktree cd disktree make install

Makefile 中的make install会构建 release 二进制,并安装三样东西(无需 root):

安装产物位置
disktree可执行文件~/.local/bin/disktree
桌面入口(启动器 + 文件管理器"打开方式")~/.local/share/applications
图标~/.local/share/icons

需要Rust 1.97+,以及 Wayland/X11 会话中一块 GPUI 可驱动的 GPU(Vulkan)。发行版自带的 Rust 若太旧,可用 rustup 安装新版。

方式二:直接下载发布包

  • Linux:下载disktree-*-x86_64-linux.tar.gz(ARM 为aarch64-linux),解压后运行install.sh,或直接把disktree拷入PATH
  • macOS:下载 zip,把disktree.app拖入应用程序;建议授予"完全磁盘访问权限",否则邮件、Safari 数据等会被算作"不可读"
  • Windows:下载 zip 解压后直接运行disktree.exe即可

系统级安装可用sudo make install PREFIX=/usr/local,卸载用make uninstall。

🗺️ 界面解读:三秒看懂马赛克

(上图为项目自带截图,展示 881 GiB 主目录的扫描结果)

界面分为四个区域:

  1. 顶部路径栏:从/开始的面包屑,以及测量模式切换——Size(大小)/Files(文件数)/Age(最后写入时间),还有"隐藏文件""显示大小""绘制深度"等开关
  2. 扫描统计行:扫描总量、过滤器、图例(各颜色对应哪类数据)
  3. 马赛克主体:
    • 颜色代表数据种类:代码、AI 代理工作区、工具链、同步文件、Git、媒体、文档、缓存
    • Age 模式下颜色改为按最后写入时间从"本周"到"更旧"渐变
    • 顶层目录带彩色色条和名称标签,越深层级颜色越浅
  4. 右侧面板:当前选中项的详情(大小、占比、文件数、Git 状态)、**"值得看看"**推荐列表(最可能可清理的大项)、已标记清单,以及磁盘剩余空间的实时投影

琥珀色被单独保留:它只用于"当前选择"和"可回收空间"这两个关键信号。

🏷️ 标记与删除:三步清理空间黑洞

这是 disktree 最贴心的设计——标记绝不破坏任何东西:

  1. 标记:把鼠标悬停在色块上按space(或x),被标记的块及其内容变为警示色
  2. 审查:按c打开标记列表,可逐项取消标记
  3. 执行,两种模式:
    • 移入回收站(默认):可恢复,直接执行。Linux 下自动选择trash-put→gio trash→ 内置 XDG 回收站
    • 永久删除:rm -rf级别的删除,永远会先弹窗确认,明确列出删什么、能腾出多少空间

删除完成后,disktree 会自动重新扫描,让屏幕上的数字与磁盘真实状态一致,并显示实际腾出的空间量。

这些数字不靠估算:应用会在删除前后各测一次卷的实际容量,实现逻辑在 crates/disktree-core/src/space.rs。

🔒 它坚决不做的事

删除保护规则位于 crates/disktree-core/src/removal.rs,且每条都有测试覆盖:

  • ❌ 拒绝删除文件系统根目录、扫描根目录、你的主目录
  • ❌ 拒绝删除挂载点(含内部带挂载点的目录)
  • ❌ 系统目录(/usr、/etc、/boot、/var/lib、Nix Store、Homebrew 前缀)一律拒绝——"包管理器才是管家"
  • ❌ 符号链接只断开链接,绝不跟随
  • ❌ 不经过 shell 传参,名为-rf的文件也只是一个普通文件

⌨️ 核心快捷键

按键作用
space/x标记 / 取消标记色块
enter进入该目录(任意深度)
⌫/esc上一级目录
alt ←alt →浏览历史前进 / 后退
滚轮向指针处放大,继续滚动即"钻入"目录
/按名称过滤:只有匹配的块保留颜色,enter仅显示它们
c打开标记审查列表
t按大小 / 文件数切换排序
g扫描整个磁盘
r重新扫描
?查看全部快捷键

📏 它量的是什么?(和du一致)

  • 默认测量磁盘实际占用(st_blocks × 512),即du报告的值,也是删除文件时真正能拿回的空间
  • 硬链接只计一次:两个名字指向同一个 inode,只算一个文件
  • 默认包含隐藏文件——因为~/.cache往往是主目录里最大的东西
  • 不跟随符号链接
  • 扫描采用 dust 式并行策略(rayon 多进程),大目录也能秒级完成

扫描核心逻辑在 crates/disktree-core/src/scan.rs,Treemap 的矩形布局算法在 crates/disktree-core/src/treemap.rs。

扫描整个磁盘

点击路径栏的/、按g、或启动器里的"Scan the whole disk"。从~扩展到/时,已测量的部分会被记忆复用——只扫描主目录之外的内容,通常只需几秒钟而不是完整重扫。

📂 项目结构速览

代码分为"无 UI 的核心"和"GPUI 界面"两部分,边界清晰:

路径职责
crates/disktree-core/扫描、树结构、矩形布局、剩余空间、删除——零 UI 依赖
crates/disktree-core/src/classify.rs目录分类规则(颜色从哪来)
crates/disktree-core/src/insights.rs"值得看看"推荐:可回收空间、AI 代理工作区、30 天未动的实验目录
crates/disktree-app/src/state.rs全部交互动作与键位映射
crates/disktree-app/src/views.rs各界面
crates/disktree-app/src/treemap_view.rs马赛克绘制与标签
crates/disktree-app/src/tests.rs端到端测试:真实窗口、真实按键
packaging/桌面入口、图标、安装脚本
AGENTS.md开发约定与不变量清单

💡 上手建议

  1. 先跑一次disktree(默认扫描主目录),用侧边栏"Worth a look"列表快速锁定候选
  2. 按t切换"按文件数"模式,往往能发现文件碎、占用小的隐形大户
  3. 标记后先s把清单导出为文本文件存底,再执行删除
  4. 在 Hyprland 等平铺窗口管理器中,建议给窗口类disktree配置浮动和更大尺寸——它需要一块宽敞的画布

disktree 证明了一件事:磁盘清理不必在"命令行精确但抽象"和"图形界面直观但危险"之间二选一。MIT 协议开源,Rust 编写、严格 lint 门禁(Cargo.toml 中clippy::pedantic全量作为错误),删除保护条条有测试。下次磁盘告急时,让它先给你看一张地图。

【免费下载链接】disktreeA treemap for finding and removing what fills your disk, for Omarchy. Rust + GPUI.项目地址: https://gitcode.com/gh_mirrors/di/disktree

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询