← 返回信息流
AI 资讯Hacker News·2 小时前

Leaves 发布:文本界面磁盘使用树图可视化工具

原标题:Show HN: Leaves – a text-UI disk usage treemap visualizer

速览

Leaves 是一个文本用户界面的磁盘使用树图可视化工具,用于直观显示磁盘空间占用情况。它以树图形式展示文件和目录大小,帮助用户快速定位大文件。该工具适合在终端环境中使用,无需图形界面。

AI 深度解读

背景

磁盘空间管理是系统运维和日常使用中的常见需求。图形化工具如 WinDirStat(Windows)和 QDirStat(Linux)通过树图(treemap)直观展示文件和目录的大小分布,但它们在纯终端环境(如远程 SSH 连接、无图形界面的服务器)中无法使用。Leaves 应运而生,它是一个完全运行在文本模式下的磁盘使用分析器,采用 Rust 语言编写,兼顾性能与跨平台特性,让用户即使在没有桌面环境的场景下也能获得类似图形工具的视觉化体验。

核心内容

Leaves 是一款受 WinDirStat 和 QDirStat 启发的文本模式磁盘使用分析工具。它将文件和目录呈现在嵌套的矩形层次结构中,每个矩形的面积与其所占磁盘空间成正比(例如,200 MB 文件的矩形面积是 100 MB 文件的两倍,父目录的矩形面积约为较小文件的 3 倍)。由于字符级渲染的分辨率有限,其精度不如纯图形工具,但优势在于可在远程 shell 连接、无图形桌面的环境下正常工作。

安装方式

  • 从 GitHub releases 页面下载预编译二进制文件(支持部分平台)。
  • 如果所选平台没有预编译包,则需要从源码构建。构建依赖 Rust 工具链(推荐通过 rustup 安装)以及基本构建工具(gcc、make、ld 等)。
  • 也支持通过 Nix 包管理器构建(使用 nix-shell 加载构建环境)。

编译与运行

  • 使用 Cargo 编译:cargo build --release
  • 安装到用户目录:cargo install --path .(需确保安装路径在 PATH 中)
  • 不安装直接运行:cargo run --release -- [选项] 目录
  • 安装后直接调用:leaves ~/Documents,若未指定路径则扫描当前目录。

默认行为与忽略规则

  • 默认忽略隐藏目录;
  • 忽略 .gitignore.ignore 文件中匹配的模式;
  • 可以通过 -A 完全禁用所有忽略规则,也可通过 -H-I-G-E 等选项单独控制隐藏文件、.ignore 文件、.gitignore 文件、.git/info/exclude 文件的排除。
  • 支持传递 glob 模式(以及以 ! 开头的否定模式)来进一步筛选扫描范围。

命令行选项

  • -d / --max-depth <MAX_DEPTH>:设置树的最大深度(默认为 5),超过该深度的子树会被聚合成摘要节点,但不影响扫描深度。
  • -x / --xray:在顶层按文件类型分组,再在每个组内按目录分割显示。
  • -A:不自动跳过任何文件(仅使用用户指定的覆盖规则)。
  • -H:不跳过隐藏文件和文件夹。
  • -I:不跳过 .ignore 匹配的文件。
  • -G:不跳过 .gitignore 匹配的文件。
  • -E:不跳过 .git/info/exclude 列出的文件。
  • -h:打印帮助。
  • -V:打印版本。

主界面交互
扫描完成后进入主视图。标题栏显示当前目录路径、总大小和文件数。底部显示快捷键说明。侧边栏为标准可折叠资源管理器树,可通过方向键导航,空格键展开/折叠目录,也支持鼠标操作。中央面板显示矩形树图,每个矩形面积大致对应磁盘大小。由于每个边框至少占两个字符宽/高,深层嵌套项会显得比同大小的顶层项更小。

颜色方案

  • 文件按扩展名着色,使用黄色/橙色/棕色配色方案;
  • 目录按名称着色,使用偏冷的 Viridis 配色(主要是蓝色和绿色)。
  • 可通过环境变量 LEAVES_COLORS=swap 交换调色板。注意两种调色板在黄色上有重叠,但目录颜色更鲜艳。按名称着色便于在层次结构中视觉比较子目录(如 debug vs. release,src vs. test)。按扩展名着色便于快速定位 .lock.json 文件。

导航与聚焦

  • 鼠标点击资源管理器中的文件/目录,选中项及其祖先会用加粗边框高亮,且选择在树和树图之间双向同步。
  • 按 Enter 键聚焦到选中目录(替换资源管理器和树图的内容)。
  • 按 Backspace 键返回父目录,返回后自动选中之前浏览的目录。
  • 不能导航到启动时指定的初始目标目录之外,如需查看外部文件需重启应用。

深度控制与摘要节点
由于字符块分辨率限制,显示数百万文件/数千目录会视觉过载。Leaves 会在一定深度以下对目录进行摘要:将相同扩展名的文件聚合成一个矩形,面积与其累计大小成正比。启动时可通过 --max-depth 控制该深度。运行期间,选中目录可以按需展开或折叠:折叠会将子矩形替换为文件类型摘要;展开会重新扫描该目录内容并在运行时深度内显示更详细的子项,超出深度的文件仍被摘要。运行时深度可通过 +- 键调整。

X-ray 模式
x 键进入 X-ray 模式。该模式在顶层按文件类型分区,每个类型组再细分为目录。用户可以聚焦任意类型组或子目录,用 Enter/Backspace 导航。再次按 x 键返回普通模式。注意:在 X-ray 模式下无法导航到被 X-ray 目录的父目录,必须先返回普通模式。

配置文件与主题
Leaves 读取 $USER_CONFIG_DIR/leaves/settings.toml(Linux 下通常为 ~/.config/leaves/settings.toml)。大多数设置可通过以 LEAVES_ 为前缀的环境变量覆盖。内置四个主题:

  • fall:文件/扩展名暖色,目录冷色;
  • spring:扩展名冷色,目录暖色;
  • greys:全灰色调;
  • mono:黑白两色。

用户可在配置文件中创建自定义主题,使用 [themes.YOUR_THEME] 节,其中包含 dirsfiles 数组(HTML 颜色代码,支持命名颜色、十六进制 RGB、rgb/hsl 三元组)。示例如下:

colors = "custom"
[themes.custom]
dirs = [
    "#4ac16d",
    "#1fa187",
    "#277f8e",
    "#365c8d",
    "#365c8d",
    "#440154",
    "hsl(120, 100%, 25%)",
]
files = [
    "#f5db4c",
    "#fcae12",
    "#f78410",
    "#e65d2f",
    "#cb4149",
]

性能与极限:虽然 Leaves 默认在较浅深度对目录进行裁剪,但用户可以覆盖设置以将所有文件加载到内存中。过小无法显示矩形的文件会用点代替。界面能处理数百万个文件且保持响应,但在切换模式时会有短暂延迟。

关键要点

  • Leaves 是纯文本模式的磁盘使用树图可视化工具,灵感来自 WinDirStat 和 QDirStat,可在无图形界面的终端(如 SSH)中运行。
  • 使用 Rust 语言开发,支持通过预编译二进制、源码编译(需 Rust 工具链)或 Nix 方式安装。
  • 树图中矩形面积与磁盘大小成正比,但受字符分辨率限制,精度低于图形工具。
  • 默认忽略隐藏目录、.gitignore.ignore 文件,可通过 -A-H/-I/-G/-E 等选项单独控制排除规则。
  • 支持 glob 覆盖模式(包括否定模式 !)来精细化筛选扫描范围。
  • 文件按扩展名着色(
查看原文 →github.com