Czkawka 12.0.2 是重复文件与垃圾清理工具,Windows 包 88805585 字节,解开 249757996 字节,里面装了三个界面不同的可执行文件。
它要解决的是:硬盘满了,但不知道满在哪。目录属性只能说哪个文件夹大;哪两个文件是同一份,它答不出来。
这次量了三件事:包里三个 exe 各是什么、四种扫描在 20000 个文件上的耗时,还有一个反直觉之处:8192 字节以下的重复文件它完全不看。
238 MB 里三个 exe
压缩包 88805585 字节,解开 249757996 字节。体积主要不是程序逻辑,是 GTK 运行时和两个图形框架。
| 文件 | 字节 | 是什么 |
|---|---|---|
| krokiet.exe | 74780160 | 新版界面,Slint 写的 |
| czkawka_gui.exe | 54660608 | 旧版界面,GTK 写的 |
| czkawka_cli.exe | 48670208 | 命令行版,十个子命令 |
| gdbus.exe | 47635 | GTK 的 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 字节 | 是 | 不报 |

阈值落在 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 两套。





