Show HN: Leaves – 一个文本界面磁盘使用树图可视化工具

Hacker News Top 工具

摘要

Leaves 是一款受 WinDirStat 和 QDirStat 启发的文本界面磁盘使用树图可视化工具,用户可以通过远程 Shell 连接分析磁盘使用情况。

GUI 磁盘分析工具非常适合找出笔记本电脑/台式机硬盘中哪些文件占用了空间。<p>在容器或远程服务器上,可用的工具仅限于纯文本工具(如 du)或列表化的 TUI(如 ncdu),这些工具通常一次只能查看一个目录。<p>我创建了 <i>leaves</i> 来填补这一空白。<p>受 WinDirStat 和 KDirStat 等经典工具的启发,它使用二维树图^1 可视化技术,以比例矩形展示整个目录层次结构。<p>得益于 Rust 和多线程,它的性能足以处理数百万个文件。然而,块字符在解析大量项目时不如像素合适。Leaves 可以按目录显示文件类型摘要,或按扩展名对顶层目录进行分区,让你不仅能看到空间的使用位置,还能看到使用方式。<p>例如,我可以看到家目录中最大的部分被 Python 的 uv 缓存和旧的 Linux ISO 镜像占用,这些文件如果需要可以轻松重新下载。或者在某个特定容器中,超过 600MB 被标准的 Rust 文档和教程占用,并且它是唯一包含 HTML/JS 文件的位置,而实际上只需要库和构建工具(提醒自己:下次记得使用 <i>minimal</i> 配置文件)。<p>^1: <a href="https://github.com/shundhammer/qdirstat/blob/master/doc/Treemap.md" rel="nofollow">https://github.com/shundhammer/qdirstat/blob/master/doc/Treemap.md</a>
查看原文
查看缓存全文

缓存时间: 2026/07/16 16:52

patonw/leaves 源码:https://github.com/patonw/leaves

Leaves —— 一个文本模式的磁盘使用可视化工具

简介

Leaves 是一个受 WinDirStat 和 QDirStat 启发的磁盘使用分析器。它以嵌套矩形的层级结构展示文件和目录。矩形面积与文件大小成正比:一个 200 MB 的文件会比其 100 MB 的同级文件大两倍,父目录的面积大约是较小文件的三倍。但由于字符级别的分辨率有限,与图形工具相比,这种展示只能算粗略近似。不过,它的优势在于可以在远程 shell 连接中使用,而无需图形桌面环境。

快速开始

你可以从发布页面下载适合部分平台的预编译二进制文件。如果你的系统不在支持列表中,请按本节的步骤从源码构建。

依赖项

构建此项目需要 Rust 工具链。

方式一:rustup

安装 Rust 的标准方式是通过 rustup 脚本(https://rustup.rs/):

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

你可能还需要安装 curl 以及基本的构建工具(如 gcc、make、ld 等),可通过发行版的 build-essentials / base-devel 元包或等效方式安装。

方式二:Nix

Nix(https://nixos.org/download/)是一个独立的包管理器和构建工具,专注于可重复、声明式的构建。安装方式如下:

curl --proto '=https' --tlsv1.2 -L https://nixos.org/nix/install | sh -s -- --daemon

然后在此项目目录中使用 nix-shell 加载构建环境:

$ cd leaves
$ nix-shell

构建/安装

使用 cargo 构建工具编译应用程序:

$ cargo build --release

Cargo 也可以为当前用户安装应用:

$ cargo install --path .

但你需要确保环境已配置为能发现安装目录下的可执行文件。

执行

不安装直接运行源码,使用 cargo:

$ cargo run --release -- [选项参数] 待扫描的目录

如果已安装,调用 leaves 并指定目标目录:

leaves ~/Documents

若不指定路径,leaves 会扫描当前目录。默认情况下,会忽略隐藏目录。此外,层级结构中 .gitignore.ignore 文件匹配的模式也不会被计入。使用 -A 可以禁用所有忽略规则;其他选项可选择性禁用特定的忽略来源。你还可以传递 glob 模式(或使用 ! 前缀取反)来细化选择范围。

使用

$ leaves --help
用法:leaves [选项] [路径] [覆盖规则]...

参数:
  [路径]               扫描根路径 [默认值:.]
  [覆盖规则]...         Git 风格的覆盖 glob 模式。'!' 前缀表示取反。

选项:
  -d, --max-depth      保留在内存中的树的最大深度。低于此深度的子树将被替换为摘要节点。不影响扫描深度。 [默认值:5]
  -x, --xray           在顶层按文件类型分组,然后按目录分割每个区域。
  -A, --include-all     不*自动*跳过任何文件。仅使用覆盖规则。
  -H, --include-hidden  不跳过隐藏文件和文件夹。
  -I, --include-ignored 不跳过 .ignore 匹配的文件。
  -G, --include-gitignored  不跳过 .gitignore 匹配的文件和文件夹。
  -E, --include-gitexcluded 不跳过 .git/info/exclude 列表中的文件和文件夹。
  -h, --help            打印帮助信息(使用 '-h' 查看摘要)
  -V, --version         打印版本号

布局

普通视图

leaves 扫描完目标目录后,会进入主视图。标题栏显示当前视图的路径、总大小和文件数量。底部是用于修改树图的快捷键。侧边栏是一个标准的可折叠资源管理器树。文件/目录详情会在树下方的框中显示。使用 ↑/↓/←/→ 键导航树;按空格键展开/折叠选中的目录。你也可以用鼠标与资源管理器交互。

中央面板以矩形显示文件和目录。每个矩形的面积大致与磁盘占用成正比。但由于每个边框至少占用两个字符的宽度/高度,深层嵌套的项目看起来会比同级的顶层项目更小。文件根据扩展名着色,采用黄/橙/棕色调。目录根据名称使用较冷的配色方案(viridis),以蓝绿色为主。可以通过环境变量 LEAVES_COLORS=swap 交换调色板。

两种调色板在黄色区域有重叠,但目录颜色趋于更鲜艳的色调。按名称给目录着色,可以让你在层级中直观比较子目录。例如,在不同项目中轻松区分 debug 和 release 目录,或者 src 和 test 目录。类似地,按扩展名给文件着色,可以让你快速发现跨目录的 .lock.json 文件。

你也可以用鼠标在资源管理器中选择文件和目录。选中的项目及其祖先会以更粗的边框高亮显示。选择与资源管理器树双向同步。

聚焦视图

按 Enter 键聚焦到选中的目录,资源管理器和树图内容将替换为该目录的内容。按 Backspace 键返回父目录。返回上层时,之前查看的目录会被选中。你无法导航到应用程序启动时指定的初始目标目录之外。要查看当前层级外的文件,请退出应用并以新目标重新启动。

展开/折叠

由于受字符块的限制,在数千个目录中查看数百万个文件通常没有帮助,视觉上会令人不知所措。每个文件只由几个字符表示,难以传达有价值的信息。leaves 会汇总一定深度以下的目录,将相同扩展名的文件合并成一个矩形,其面积与它们的累计大小成正比。你可以在启动时通过 --max-depth 控制此深度。在运行时,可以按 e 展开或按 d 折叠选中的目录。折叠目录会将其子矩形替换为文件类型摘要。展开目录则会重新扫描该目录的内容,并在运行时深度内显示更详细的子项。超出该深度后,文件再次被分组为摘要节点。运行时深度可以通过 +- 键设置。

折叠状态

模式

除了按目录划分视图顶层,使用 X 光 模式还可以显示每个文件类型的分组。每个分组再按目录细分。你可以从任何视图按 x 键进入 X 光模式。在 X 光模式下,你可以聚焦任何分组或子目录,使用 Enter 和 Backspace 切换视图。再次按 x 键返回普通模式。

如果不返回普通模式,你将无法导航到 X 光目录的父级。

X 光视图

配置

Leaves 从 $USER_CONFIG_DIR/leaves/settings.toml 读取配置。具体位置因平台而异。对于大多数 Linux 用户,它在 ~/.config/ 下。你可以使用 LEAVES_ 前缀的环境变量覆盖大部分设置。

设置描述环境变量
dark_modetrue/false使用更亮的颜色渲染元素,增强在深色终端上的可见性LEAVES_DARK_MODE
color_shift0.0 到 1.0对颜色进行提亮或加深,以便获得更好的可见性LEAVES_COLOR_SHIFT
colors主题名称文件/目录渐变使用的主题名称LEAVES_COLORS
dir_stylethick/plain用更粗的线条渲染目录边框LEAVES_DIR_STYLE

主题

内置了四个主题:

  • 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 默认在相对较浅的深度修剪目录,但你可以覆盖此设置,以便将所有文件加载到内存中。小到无法显示为矩形的文件会用点表示。界面可以处理数百万个文件,同时保持响应速度,但在切换模式时会有些延迟。

根目录

扫描根目录 / 时,务必排除虚拟文件系统(如 /dev/proc 等),否则可能得到无意义的结果。可以在根目录下放置 .ignore 文件,更新 ~/.config/git/ignore,或使用取反的覆盖规则:

leaves -A -d 3 / '!/proc' '!/tmp' '!/run' '!/sys' '!/dev' '!/mnt' '!/nix'

链接

leaves 不会跟踪符号链接,因为它们不会增加目录内部的磁盘使用。不会尝试检测硬链接,因此硬链接会被重复计数。

相似文章

Show HN: Davit,一个 Apple Containers 界面

Hacker News Top

Davit 是一个免费、开源的 macOS 原生应用,使用 SwiftUI 构建,为 Apple silicon 上的 Apple 容器平台提供用户界面,允许用户无需 Docker Desktop 即可运行 Linux 容器。