软件工具

重复文件清理:Czkawka 扫 825MB 只用半秒

🐨硬盘收藏家 LV1 · 1 次浏览 · 0 条回复

硬盘报警那天我打开文件管理器,才发现同一个目录里躺着三套几乎一样的照片:2023 年换手机导过一遍,换备份软件又导过一遍,中间还手动拷了一份。名字全不一样,按文件名去重根本没用。这周把 Czkawka 12.0.2 拉下来认真跑了一遍,数据和坑都记在下面。

重复文件清理:Czkawka 扫 825MB 只用半秒

它不只会找重复文件

Czkawka 是 Rust 写的开源磁盘清理工具,GitHub 上 34.6k star,12.0.2 版在 2026 年 9 月 9 日发布,仓库到写这篇的时候当天还有新提交。功能一共十来个:重复文件、相似图片、相似视频、按标签找同一首歌、空文件夹、大文件、临时文件、损坏文件、扩展名错乱、清 EXIF、视频优化。

界面有三种:带 GTK 的老版 Czkawka、用 Slint 重写的新界面 Krokiet,还有一个安卓 APK(叫 cedinia,19.1MB)。我这次用命令行版,Windows 下就是一个 46.4MB 的单独 exe(48,670,208 字节),不吃运行库,扔进任意目录就能跑。

测试条件和实测数据

为了贴近日常情况,造了一个 825MB、1338 个文件的目录:400 张照片(300–700KB)另外复制一份到别处并统一改名,模拟换设备后重复导入;400 张互不相同的照片;60 段 3MB 视频,其中 20 段在子目录里又存了一份;40 个 3–6KB 的小图标,其中 15 个有副本;3 个大小都是 1MB、内容完全不同的 docx。

机器是 Ryzen 5 3550H(4 核 8 线程)、14GB 内存、SSD。命令一行就够:

czkawka_cli.exe dup -d "D:\photos" -f result.txt

跑出来的数字:

  • 默认(HASH + BLAKE3,8 线程):两次分别 524ms 和 554ms,找到 420 个重复文件、420 组,标称可回收 252.97MiB
  • 峰值内存:30.8MB
  • 单线程 -T 1:1041ms,结果一模一样
  • 哈希换 XXH3:326ms;换 CRC32:363ms,结果也一致
  • 第二次跑(吃到哈希缓存):254ms

为什么这么快?因为它先按文件大小分组,只有"大小撞车"的文件才会真的被打开读内容算哈希。825MB 里真正读过的只有约 520MB,那 400 张独立大小的照片一次都没被打开。所以 8 线程只比单线程快 2 倍也很正常——瓶颈在随机读盘,不在算哈希。

两个默认值会让你误判

8KB 以下的文件直接不看。 -m 最小文件大小默认是 8192 字节,小于这个值根本不进候选。我那 15 组重复小图标默认一个都没报;加上 -m 1 之后,结果从 420 组变成 435 组。图标、表情包、脚本、缩略图这类小文件重复多的话,这个参数必须手动改,否则你会以为"没重复"。

只按大小比会误报。 -s SIZE 只用文件大小判断,同一个目录它报的是 483 个文件、432.96MiB,比真实值多出 63 个文件、约 180MB。我特意造的三个 1MB 随机 docx 被它当成一组重复——它们内容毫无关系。省几十毫秒的代价是误删,要动真格删除就别用这个模式,老老实实走 HASH。

硬链接替换后的假象

-D HARD 可以把重复文件换成硬链接,两条路径都还能打开,但只占一份空间。实测这一套 252.97MiB 的重复,换完磁盘实际减少 259,856KB(253.8MiB),文件数量一个没少(1338 还是 1338),耗时 1.2 秒。

但紧接着再跑一次默认扫描,它会告诉你 Not found any duplicates——因为硬链接默认被跳过,要加 -L 才会重新列出来。我第一次看到这句话以为操作失败,跑去看磁盘空间才知道早就生效了。

硬链接比直接删好在哪:旧目录结构完整保留,照片管理器和 Jellyfin 这类媒体库不会因为路径消失而丢条目。限制也很明确:必须同一个分区,NTFS 支持;跨盘、移动硬盘、网盘挂载目录都不行,那种情况只能删或者移走。

我现在的用法

先用 -Q 空跑一遍看清单,把结果导出成 txt 逐条核对,确认没问题再执行。日常固定这么跑:

czkawka_cli.exe dup -d "D:\photos" -e "D:\photos\keep" -f D:\dup.txt -Q

-e 用来排除不想动的目录,比如正在收拾的素材库。图形界面我更推荐 Krokiet,能直接预览相似图片;相似图片走的是感知哈希,这次没测——手头没有大批真照片,造出来的图不具代表性,不敢瞎写数字。

缓存这里有个我担心过的点:如果它只按路径和修改时间记哈希,那我用别的工具改过文件、又把时间戳改回去,它就会拿旧结果骗我。单独搭了个小实验——两个 3MB 相同文件,先跑一次建缓存,然后把其中一个内容整个换掉(大小不变)、把修改时间改回原值再跑,它没有再把两个文件当成重复。默认只有 257144 字节以上的文件才进哈希缓存,这也解释了第一次 524ms、第二次 254ms 的差别。想彻底排除干扰就加 -H,代价是每次都重新读盘。

它解决不了什么

几个边界得说清楚,免得白折腾:

  • 网盘里的重复它看不见。只有把网盘挂成本地盘符才会被扫到,而且走网络读哈希很慢,不如先同步下来再扫。
  • 跨盘比较要分次来。两块硬盘之间找重复,得把它们都加进 -d,内容要读两遍,时间基本翻倍。
  • 相似视频要逐帧抽帧比对,比找重复文件慢一个量级,几十个片子就得等。
  • 它替代不了备份策略。去重只是把同一份数据从三份压成一份,误删了照样没得救。

顺带一句对比:Everything 那种按文件名索引的工具,遇到"改名后的同一张照片"完全无能为力,两者解决的不是同一个问题,我机器上是都装着,各管一段。

说回实际效果:那套 825MB 的目录清完,实际省下 253.8MB,差不多三成。你们照片是只留一份,还是两套备份都留着?

回复

还没有回复,抢个沙发

登录后即可参与讨论

去登录 注册账号

相关帖子