Show HN: Leaves – 一个文本界面磁盘使用树图可视化工具
摘要
Leaves 是一款受 WinDirStat 和 QDirStat 启发的文本界面磁盘使用树图可视化工具,用户可以通过远程 Shell 连接分析磁盘使用情况。
查看缓存全文
缓存时间: 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_mode | true/false | 使用更亮的颜色渲染元素,增强在深色终端上的可见性 | LEAVES_DARK_MODE |
| color_shift | 0.0 到 1.0 | 对颜色进行提亮或加深,以便获得更好的可见性 | LEAVES_COLOR_SHIFT |
| colors | 主题名称 | 文件/目录渐变使用的主题名称 | LEAVES_COLORS |
| dir_style | thick/plain | 用更粗的线条渲染目录边框 | LEAVES_DIR_STYLE |
主题
内置了四个主题:
- fall:文件/扩展名使用暖色,目录使用冷色。
- spring:扩展名使用冷色,目录使用暖色。
- greys:所有内容均为灰色调。
- mono:黑白。
此外,你可以在配置文件中使用 themes.YOUR_THEME 部分创建新主题。每个部分需要 dirs 和 files 两个数组,其值为 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:怀念移动的方块,所以我构建了一个真正的Linux磁盘碎片整理工具
一个为Linux构建的图形化磁盘碎片整理工具,使用Rust编写,可以显示文件系统块映射,并对ext4和FAT卷进行碎片整理,无需root权限,灵感来自Windows碎片整理工具。
Show HN: Davit,一个 Apple Containers 界面
Davit 是一个免费、开源的 macOS 原生应用,使用 SwiftUI 构建,为 Apple silicon 上的 Apple 容器平台提供用户界面,允许用户无需 Docker Desktop 即可运行 Linux 容器。
Show HN: Faceoff – 一款关注 NHL 比赛的终端界面
Faceoff 是一款终端界面应用程序,用于实时关注 NHL 冰球比赛,具有实时比分、比赛详情、排名、球员数据和球队信息,并采用响应式布局。
Show HN: macOS 菜单栏计量器,用于显示 Claude Code 配额
一个 macOS 菜单栏工具,通过 SwiftBar 实时显示 Claude Code API 配额使用情况,支持多个账户,并在达到限制时显示使用条和倒计时。
Show HN:快速原生Mac文件管理器(筛选、模糊查找、9MB、非Electron)
WhimFiles是一款原生的macOS文件管理器,具有实时筛选、模糊文件夹搜索、双窗格浏览、悬停预览和标签支持功能,所有功能集成在一个9MB的软件包中。