〖开源自荐〗受 SpaceSniffer 启发,我做了一个跨平台的硬盘空间分析工具:SpaceKnife

软件名称

SpaceKnife

一句简介

打开扫一下,就能看到整块硬盘被什么占满:每个文件夹、每个文件画成一块,块越大占用越多,边扫描边画。

亮点

  • 边扫边画的树图:每个文件夹、每个文件一块,块越大占用越多;还能换成火焰图、火焰-极坐标图
  • 扫得快,也不拖慢电脑:NTFS 盘直接读主文件表(MFT),在我的电脑上 890 万项约 4.7 秒;扫描强度分五档,别的程序要用盘时自动让路
  • 看得出变化:每次扫描自动存快照,任意两次对比,哪里在长一眼就知道
  • 只看想看的:输入 :class:视频;>1gb 只亮出 1 GB 以上的视频;Ctrl+K 搜整个扫描结果
  • 删得放心:先放进删除篮,默认移到回收站,可以撤销;系统和程序目录受保护
  • 跨平台,体积小:Windows / macOS / Linux,中文界面;0.3.5 起 Windows 安装包约 25 MB
  • 免费开源:MIT 协议,没有广告,没有遥测

SpaceKnife 0.3.5 演示:树图、火焰图、火焰-极坐标图、过滤、命令面板、快照对比(模拟数据)

应用平台

  • Windows 10 / 11(x64):界面用系统自带的 WebView2,Windows 11 自带;部分 Windows 10 电脑没有,安装程序会自动装上(需要联网)
  • Linux:Ubuntu 22.04+ / Debian(deb)、RHEL 9+ / Fedora(rpm)、其他发行版(AppImage)
  • macOS 14+(Apple 芯片 / Intel):自签名的预览版,还没经过苹果公证
  • 免安装的便携版:Windows(x64、ARM)、Linux(x64、arm64)、macOS(Apple 芯片、Intel)都有;ARM 版 Windows 11 和 arm64 Linux 目前只有便携版
  • Linux 便携版有两种:小巧的(约 37 MB,用系统的 WebKitGTK 4.1:Ubuntu 22.04+、Debian 12、Fedora)和自带引擎的(约 136 MB,RHEL 9 也能用)
  • 没有桌面的服务器:便携版里的 spaceknife-cli headless,在浏览器里用

推荐类型

【开发者自荐】

使用门槛

  • 是否收费:免费,MIT 协议开源
  • 是否需要注册:不需要
  • 是否需要联网:不需要;没有遥测,只会每天检查一次有没有新版本(可以在设置里关掉)
  • 中文界面:有,简体中文和英文,默认跟随系统

应用简介

为什么做这个

SpaceSniffer 的嵌套树图是我觉得最直观的磁盘分析方式:一眼就能看出谁最大,双击就能钻进去。但它只支持 Windows(虽然我成功在x86 mac上用wine运行过,但是一来不方便,二来太抽象了),没有中文界面,扫描时也没法控制对硬盘的占用。所以我受它启发,从头写了一个新的:跨平台、有中文、扫描可以限速,还能用快照看出空间是怎么一点点被吃掉的。

树图:块越大,占用越多

  • 边扫描边绘制,不用等扫完
  • 双击进入文件夹,Backspace 返回
  • 悬停显示大小、类型,以及创建、修改、访问时间
  • 可用空间和没扫描到的空间也画进图里

三种视图

  • 树图:面积代表大小,一眼找出最大的块
  • 火焰图:每一层是一条横带,长度代表大小;又深又窄的目录也能一行读完
  • 火焰-极坐标图:把火焰图卷成一个圆,中心是当前文件夹,越往外越深,角度代表大小
  • 按 V 随时切换,扫描中也行;三种视图共用缩放、选中和过滤

浅色和深色主题

  • 默认跟随系统的浅色 / 深色设置,也可以在「设置 › 外观」里固定一种;树图、火焰图和火焰-极坐标图一起换色,切换时不闪白

文件分类

  • 文件按类别着色:视频、图片、音频、压缩包/镜像、程序/系统、文档、代码/开发、数据/模型、游戏,认识 430 多种扩展名
  • 还会按文件夹判断:游戏安装目录里的文件都算「游戏」,项目文件夹(有 .git、package.json 等)里的算「代码」,模型缓存算「数据」
  • 悬停一个类别,图上就亮出它在哪;右键文件夹选「归类」可以自己指定
  • 「本机磁盘」页把扫过的卷按类别加在一起,写出每类多大、占多少;每个卷最近一次完整扫描的结果,重启后照样显示

扫得快,也不拖慢电脑

  • Windows 上扫描整个 NTFS 盘时,直接读取 NTFS 主文件表(MFT),不用逐个目录遍历。这需要管理员权限:只有一个只读的扫描助手会弹 UAC,界面本身不提权;不给权限就自动改用普通扫描。在我的电脑上,890 万项的盘大约 4.7 秒扫完。
  • 同一个文件的多个硬链接只算一次
  • 其他文件系统和 Linux 用并行目录遍历,并按文件夹自己调节同时在列的个数:要读盘的和已在缓存里的分开算
  • 扫描分极速 / 均衡 / 安静 / 空闲 / 自定义五档,可以限制扫描自己造成的磁盘负载,别的程序在用磁盘时自动让路
  • 硬扫描尽量不改写文件夹的访问时间(Windows 和 Linux),扫一遍大盘不会白白写盘
  • 扫完继续跟踪文件变化,变化的块会闪烁;不喜欢可以在设置里关掉

过滤:只看想看的

  • 输入 :class:视频;>1gb,只亮出 1 GB 以上的视频,其余变暗;右侧列出匹配结果
  • 可以按名称、类型、大小、时间、属性、标签组合过滤,兼容 SpaceSniffer 的过滤写法并做了扩展

快照对比:空间是怎么被吃掉的

  • 每次扫描后自动保存快照,任意两次都能对比:橙色是增长,蓝色是减少,新增和已删除的项都有标记
  • 按当前的增长速度,估算可用空间还能用多久

命令面板

  • Ctrl+K 按名称搜索整个扫描结果,支持拼音首字母,也可以直接执行命令

删除更放心

  • 右键菜单和删除篮,默认移到回收站,可以撤销
  • 系统目录和程序目录受保护
  • 0.3.5 起删除篮快得多:Windows 上移到回收站不再逐项交给系统处理

安装包多大

0.3.5 起后端从 Python 换成 Rust,窗口用 Tauri 2 和系统自带的网页视图(Windows 的 WebView2、macOS 的 WebKit、Linux 的 WebKitGTK 4.1),不再自带一整个 Chromium 和 Python 运行时:Windows 安装包约 25 MB(0.3.4 是 136 MB),macOS 约 34–37 MB,deb 约 30 MB,小巧的便携版约 34–38 MB。RHEL 9 没有 WebKitGTK 4.1,所以 rpm(约 94 MB)、AppImage(约 131 MB)和自带引擎的 Linux 便携版仍用精简的 Electron 外壳,界面是同一套。

目前的限制

  • 这是预发布版(0.3.5),肯定还有 bug,欢迎反馈
  • 0.3.5 存的快照,0.3.4 及更早的版本打不开(0.3.x 存的快照 0.3.5 照样能开)
  • ARM 便携版只在 GitHub 的 ARM 构建机上测过,还没在真机上试过
  • 安装包还没有代码签名,Windows 第一次运行会提示「未知发布者」,点「更多信息 › 仍要运行」

更新记录

  • 0.3.5(11-10):后端从 Python 换成 Rust、界面换成 Vue,窗口改用 Tauri 2 和系统自带的网页视图,Windows 安装包从 136 MB 降到约 25 MB;功能和界面不变,数据都保留,0.3.4 点更新徽章就能升级;扫描按文件夹自己调节并发;删除篮快得多;修了「在终端中打开」的安全问题。完整说明
  • 0.3.4(10-26):浅色主题;ARM 版 Windows 11、arm64 Linux 和 macOS 有了便携版;MFT 快速扫描快了约四倍,内存峰值大降;硬扫描更快,并且尽量不改写文件夹的访问时间;「本机磁盘」记住每个卷的扫描结果;修了一批问题。完整说明
  • 0.3.3(10-21):「磁盘」页(容量、温度、SSD 寿命、接口降速提示);回收站在图上标出;文件分类更准;可选「无缝更新」,永远不会自动安装
  • 0.3.2(10-21):帮助文档随软件打包,按 F1 打开;F5 / Shift+F5 / Ctrl+S 快捷键
  • 0.3.1(10-20):macOS 版;Windows 和 Linux 便携版;三种视图;Windows 硬扫描约快 4 倍;更新提醒(可以关掉)

官方网站

请只从 GitHub Releases 或官网下载。每个版本都附带 SHA256SUMS.txt,可以用来校验安装包。

致谢

SpaceKnife 受 SpaceSniffer 启发,嵌套树图、实时扫描、文件变化提示和过滤语法这些好用的做法都来自它。SpaceKnife 是独立开发的新项目,和 SpaceSniffer 及其作者没有任何关联。

截图和动图里是模拟数据(一块虚构的 2 TB 数据盘),不是真实的磁盘。

有问题直接在楼里回复,我会尽量都回;也可以去 GitHub 提 issue。

5 个赞

强烈想要 Mac 版本的。反而 Win 版本很多替代品:slightly_smiling_face:

Mac版本的其实代码已经准备好了,我在想要不要交99美元一年的苹果开发者税

期待便携版

便携版已经在做了,已经构建了Windows x64/Linux x64,计划支持Windows ARM64/ Linux ARM 64

确实,蛮贵的:sweat_smile:

我已经构建了macos 自签名版本 x64/arm64,如果你愿意接受麻烦点操作的话,可以在系统设置里面的允许未知软件,可以提前用上,今天我应该就会发布mac自签名版本/Win&Linux便携版,x64的mac版本我自己还在测试,已经发现了一些问题在改进

便携版更新了,在Release SpaceKnife 0.3.1 · DuskXi/SpaceKnife · GitHub 里面,暂时做了Windows x64和 Linux x64的便携版,ARM64的还没做完build配置

Mac 自签名版本也发布了,支持x64和ARM64,就是需要启动以后去设置里面点击仍要启动,因为苹果的开发者账号下来没那么快,就先发布自签名版本了

近几天连着更新了三个版本,汇总一下(现在是 0.3.3,仍是预发布版):

0.3.1

  • 有 macOS 版了(Apple 芯片 / Intel,自签名,第一次打开要去「系统设置 › 隐私与安全性」点「仍要打开」);Windows 和 Linux 有了免安装的便携版。就是楼上 @Shruru 和 @LRJ 问到的这两个
  • 三种视图:树图、火焰图、火焰-极坐标图,按 V 随时切换,扫描中也行
  • 扫描更快:Windows 上硬扫描大约快 4 倍
  • 加了更新提醒:每天最多查一次本项目的发布,不发送任何关于你或你文件的信息,可以在设置里关掉

0.3.2

  • 帮助文档随软件打包,离线可看;按 F1 打开当前界面对应的那一页
  • F5 / Shift+F5 / Ctrl+S:重新扫描当前视图 / 全部重新扫描 / 保存快照

0.3.3

  • 「磁盘」页:所有磁盘一页看完,包括容量、剩余空间、温度、通电时间、SSD 剩余寿命、累计读写量;还会提示接口降速,比如 PCIe 5.0 的盘插在 4.0 的槽上、USB 3 读卡器跑在 USB 2 上。Windows 和 macOS 上不需要管理员权限
  • 回收站:在图上用斜纹标出来,并写明清空能腾出多少空间;按 R 可以把回收站排除在图外
  • 文件分类更准:新增「代码」「数据」两类,认识 430 多种扩展名;还会按文件夹判断,比如游戏安装目录里的文件都算「游戏」,项目文件夹里的算「代码」。在一块 2.7 TB 的开发盘上,「其他」从占空间的 34% 降到了 2%
  • 悬停一个类别,图上就只亮出这一类文件在哪
  • 更新:新版本在后台下载、校验,然后由你选「无缝更新」还是自己运行安装程序。永远不会自动安装,也可以直接跳过整个版本系列
  • Windows 卸载更干净:缓存和下载过的更新会删掉;快照和设置默认保留,勾选才删
  • 无界面模式 --headless:在浏览器里用,适合没有显示器的 Linux 服务器
  • 修了 .ts 文件被当成视频、过滤有时退不出来、删掉的空间显示成「未知空间」等问题

三种视图:树图、火焰图、火焰-极坐标图(模拟数据)

下载还是在 GitHub 的 DuskXi/SpaceKnife Releases 页面,请只从 GitHub 或官网下载。Windows 安装包还没签名,macOS 版还没公证(开发者账号还在等)。有问题欢迎在楼里说。

这两天爆肝了一堆更新,性能优化,更多平台支持,bug修复,还有测试中的插件系统,顺路我还做了一个独立仓库用于在各个平台上用模拟数据测试各个同类软件的性能

window下一直在用古早版的spacemonger,大小只有200k

0.3.4 发了(10 月 26 日,还是预发布版),挑几个用起来能感觉到的说:

  • 浅色主题:终于有了,默认跟着系统走,三种图一起换色,切的时候不闪白。
  • MFT 快扫快了大概 4 倍:我这边 890 万个文件的盘,以前要 19 秒左右,现在 4.7 秒左右;后端内存峰值也从 3.6 GB 左右降到 1.9 GB 左右。
  • 硬扫描也快了些:同一块 NVMe 上 191 万项的盘,冷扫从 11.4 秒降到 7.7 秒。
  • 扫盘不再白白写盘:以前硬扫一遍会把所有文件夹的「访问时间」改一遍,870 万项的盘能白写 1.5–3.3 GB,现在基本不动了(Windows 系统盘里少数只有系统自己能改的文件夹还是没办法)。
  • 更多平台:ARM 版 Windows 11、arm64 Linux 和 macOS 都有便携版了,解压就能用,数据放在旁边的 data 文件夹里。ARM 版我手上没有真机,只在 GitHub 的 ARM 机器上测过,有 ARM 设备的朋友欢迎帮忙试试。
  • 另外修了一堆边角问题,比如 WinBtrfs 上只差大小写的文件夹算错、Linux 和 macOS 上路径特别长的文件夹漏扫。

已经装了的,点右上角的更新徽章就能升级,快照和设置都保留。完整的更新说明在 GitHub 的 Release 页面。

@flintt 200K 确实厉害。体积是 SpaceKnife 的短板(要带浏览器内核和 Python 运行时,一楼写了原因),这版先在速度和内存上下了功夫。下几个版本我可能就会把纯rust版本端上来,到时候体积也会爆缩的,同时性能也会比较好,我还做了一个benchmark,尽可能做到公平,当然我也不会避嫌不提我是SpaceKnife 的作者去做了这么个对比 GitHub - DuskXi/Disk-Scan-Benchmark · GitHub

有没有兴趣出一个纯web的版本?比如Docker一键部署,然后web页面展示

Docker版本还真暂时没有,但是确实可以做
但是web页面展示已经有了,程序的命令行参数支持无头模式启动+局域网指定IP地址监听,就已经可以实现局域网web管理了,是专门为没有GUI和桌面的Shell环境准备的,因为程序本来就是Electron程序+python+rust模块的缘故,当时支持这个基本上是无缝支持的,后续的纯rust版本也会保留这个能力

1 个赞

试了一下 Spaceknife,终于有了个顺手的磁盘整理工具。之前用过 SpaceSniffer 和 WizTree,在我这台电脑上,要么速度不理想,要么运行不稳定,体验都不太好。

现在 Electron 似乎挺招嫌,但在这个应用上,我觉得合适。界面美观、操作流畅、功能丰富,能换来这样的使用体验,值得。

磁盘整理工具只在需要时打开,用完就关,不需要常驻内存。对我来说,这点内存开销根本不是问题。

1 个赞

感谢你的使用体验和反馈

electron过两个版本可能也会被雪藏了,接下来应该是纯rust版本+tauri(基于系统层面的webview,也就是说,没有electron庞大的体积,也没有丢失vue/react等前端框架优雅的UI和庞大的样式选择可能性,不会受制于系统原生UI的颜值),体积与内存会变得更小,当然我保证,发布之前会使其bug比electron版本更少后才会发布,不会盲目更新

Electron招人讨厌的一大原因是重,而另一个原因可能就是将未经修改的网页直接套壳进去,这会让桌面应用沾染上廉价的Web感,这会让人觉得这玩意和WPA的区别是什么?但是election的好处是html,html能够以较低的工作成本开发出远超原生UI的视觉体验,当然了,我们不是说原生UI不好,而是想要让系统原生UI能够达到web的水平,那么花出去的精力那是十倍甚至几十倍的,尤其是对于跨平台软件来说,这更加困难,说实话类似于QT6的PySide6,已经可以做到颜值有保证的情况下统一跨平台的GUI,但是其实开发起来还是比web麻烦。

1 个赞

非常棒,spacesniffer搜我的c盘会卡死,而你新的rust版本非常快!

只能说我就是因为spacesniffer开始不好用了以后才萌生出写这个软件的,spacesniffer对于上世代级别的硬盘还是绰绰有余的,但是对于当前比较顶级的4TB C盘,超过500万文件3TB存量文件情况下,就很痛苦了,因为单线程扫描,也没NTFS的MFT加速

0.3.5 发了(11 月 10 日,还是预发布版)。这版功能和界面跟 0.3.4 一样,底下整个换了:

  • 后端从 Python 换成 Rust,界面换成 Vue,窗口用 Tauri 2 和系统自带的网页视图(Windows 的 WebView2、macOS 的 WebKit、Linux 的 WebKitGTK)。就是 17 楼说的纯 Rust 版本,楼上 @hype1type 已经用上了。
  • 体积:Windows 安装包 136 MB → 25 MB,macOS 141 MB → 34 MB,deb 132 MB → 30 MB,小巧的便携版都在 34–38 MB。rpm 和 AppImage 因为 RHEL 9 没有 WebKitGTK 4.1,还是精简的 Electron 外壳(94 MB / 131 MB)。
  • 扫描按文件夹自己调节并发:要读盘的和已经在缓存里的分开算,从缓存扫的时候快得最多。
  • 删除篮快多了:Windows 上移到回收站不再逐项交给系统处理。
  • 修了一个安全问题:文件夹名里带 &、^、% 或括号时,「在终端中打开」可能把名字的一部分当命令执行(Windows)。建议都更新。
  • @Jackxwb 问的网页版:无头模式现在就是一个命令 spaceknife-cli headless --listen 地址,不需要显示器,也不需要桌面环境的库,服务器上放一个便携版就够了。Docker 镜像还没做。

升级点右上角的徽章就行,设置、类别、快照都保留。0.3.4 里设成「只要正式版」的这次不会提示(0.x 都标成了预发布),改成「包括预览版」,或者直接去 Release 页下载。部分 Windows 10 电脑没有 WebView2,安装程序会自动装上(要联网)。另外,0.3.5 新存的快照退回 0.3.4 打不开。