Czkawka 12.0.2 是重复文件与垃圾清理工具,Windows 包 88805585 字节,解开 249757996 字节,里面装了三个界面不同的可执行文件。

它要解决的是:硬盘满了,但不知道满在哪。目录属性只能说哪个文件夹大;哪两个文件是同一份,它答不出来。

这次量了三件事:包里三个 exe 各是什么、四种扫描在 20000 个文件上的耗时,还有一个反直觉之处:8192 字节以下的重复文件它完全不看。

238 MB 里三个 exe

压缩包 88805585 字节,解开 249757996 字节。体积主要不是程序逻辑,是 GTK 运行时和两个图形框架。

文件字节是什么
krokiet.exe74780160新版界面,Slint 写的
czkawka_gui.exe54660608旧版界面,GTK 写的
czkawka_cli.exe48670208命令行版,十个子命令
gdbus.exe47635GTK 的 D-Bus 辅助进程
压缩包88805585解压后 249757996,压缩比 2.8

两个界面并存是为了过渡

krokiet.exe 74780160 字节是新一代界面,czkawka_gui.exe 54660608 字节是原来的 GTK 版本。两个都能用,功能一致,新版更轻但还在补齐细节。

命令行版能脱离界面跑

czkawka_cli.exe 48670208 字节,不需要图形环境,适合放进批处理或计划任务。它和界面版共用同一套扫描引擎。

十种扫描模式

命令行版列了十个子命令,界面版左侧对应九项。这些模式覆盖了「磁盘为什么满」的绝大多数成因。

子命令找什么
dup内容相同的重复文件
big超过阈值的大文件
empty-files大小为 0 的文件
empty-folders没有任何文件的目录
temp临时文件
image视觉相似的图片
video相似的视频
music按标签重复的音乐
broken损坏的文件
symlinks失效的符号链接

dup 和 image 是两回事

dup 按内容哈希比对,字节级相同才算重复;image 做视觉相似度,同一张图存成不同尺寸或不同压缩率也能找出来。前者准,后者省空间更狠。

十个模式共用一个扫描器

每个模式都先遍历目录,再按自己的规则筛。目录里有 10 万个文件时,换一种模式就要重走一遍这 10 万次访问。

四种扫描都在 200 毫秒上下

拿一份 10000 个文件、20857118 字节的目录树,复制一份做对照,四种模式各跑两遍取中位。

模式范围耗时
dup两份目录共 20000 个文件217 ms
big单份 10000 个文件211 ms
empty-files单份 10000 个文件212 ms
empty-folders单份 421 个目录204 ms

dup 扫两倍文件也只多 6 毫秒

217 毫秒对 211 毫秒,文件数翻倍几乎没影响。因为瓶颈是元数据读取而不是内容比对,且这 20000 个文件里绝大多数在前面的「大小分组」阶段就被排除了。

204 毫秒是启动成本

只扫 421 个目录的 empty-folders 也要 204 毫秒,和扫 20000 个文件的 dup 差 13 毫秒。48670208 字节的程序加载占了其中绝大部分。

8192 字节以下的重复不看

造五个尺寸的相同文件各两份,只有 100000 和 10000 被报出来,8000 及以下全部漏掉。这个默认门槛没有任何提示。

文件大小两份内容一致是否报重复
100000 字节是报出,显示 97.66 KiB
10000 字节是报出,显示 9.77 KiB
8000 字节是不报
4000 字节是不报
1000 字节是不报
Krokiet(Czkawka 12.0.2 新版界面):左侧列出重复文件、空文件夹、大文件、空文件、临时文件、相似图像等九种模式,中间是选择/大小/文件名称/路径/修改日期五列结果表,底部一行扫描到软链接九个按钮

阈值落在 8000 和 10000 之间

8000 字节漏、10000 字节报,中间只有 8192 一个整数(8 KiB)。这个默认值在界面的设置里可以改,但命令行版没有对应参数,用它做批处理时小于 8 KiB 的重复文件永远找不到。

体积显示用 KiB 不是 KB

100000 字节报成 97.66 KiB,4000 字节报成 3.9 KiB。换算基数是 1024,看结果时别把这当成 KB 导致对不上账。

界面:左九项、下九键

新版界面把功能摊得很直白:左边一列九个模式,底部一行九个动作,中间是结果表。

位置内容
左侧栏重复文件、空文件夹、大文件、空文件、临时文件、相似图像、相似视频、重复音乐等 9 项
结果表头选择、大小、文件名称、路径、修改日期 5 列
底部按钮扫描、选择、移动、删除、回收站、保存、排序、硬链接、软链接 9 个
路径区参考路径与排除路径各一组,默认排除 C:\Windows

删除默认走回收站

底部单独有一个「回收站」按钮,说明它默认不直接删文件。要彻底删得用旁边那个「删除」,这一步设计成需要人主动选。

参考路径决定谁被留下

标成参考路径的目录里的文件会被保留,另一份才被列为可删。同一组重复文件留哪份,靠这个设置控制而不是靠文件名。

几个真踩过的点

下面三条在这次测试里真实出现,附当时的处理方式。

现象原因处理
两个完全相同的目录报「没有重复」文件内容其实不同,是我造数据时各写了一份随机字节先确认两份文件哈希一致,再怀疑工具
小文件明明重复却找不到8192 字节以下的文件被默认跳过在界面设置里调低最小文件大小,命令行版无此参数
结果里 97.66 KiB 对不上 100000 字节用 1024 进制显示按 KiB 读,100000 除以 1024 约等于 97.66

先验哈希再怀疑工具

第一次跑 dup 时两个目录明明一模一样却报「Not found any duplicates」,查下来是造数据时两份各写了一串随机字节,内容本来就不同。用工具前先确认输入是对的。

命令行版少了最小大小开关

界面设置里有最小文件大小,命令行版 dup --help 列出的选项里没有对应参数。要在脚本里找小文件的重复,只能自己先筛一遍。

什么场景值得上

硬盘告急、又不想逐个文件夹翻的时候,它把「哪两个文件是同一份」这个问题变成一张表。

场景合适度说明
清理重复的照片和安装包高文件通常大于 8192 字节,命中率高
找占空间的大文件高big 模式 211 毫秒扫 10000 个文件
清空文件夹与临时文件中这两种模式同样受 8192 阈值影响的部分较小
清理大量小文本的重复低小于 8192 字节的默认不报

它只读不删

扫描只生成结果表,删除要单独点按钮,默认还走回收站。这个顺序对误操作友好,但也意味着磁盘不会自动腾出来。

授权与费用

MIT 许可,个人和商业环境都不收费。源码在 GitHub 上,主要语言 Rust,release 覆盖 Windows、macOS、Linux 三平台,界面用 Slint 与 GTK 两套。