Czkawka完整指南:4步找出重复文件,把冗余空间释放出来
【免费下载链接】czkawkaMulti functional app to find duplicates, empty folders, similar images etc.项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka
Czkawka 是一款用 Rust 编写的免费开源重复文件清理工具,可在 Windows、macOS、Linux、FreeBSD 和 Android 上运行。除了重复文件查找,它还覆盖相似图片、重复音乐、空文件夹、损坏文件等排查场景。所有扫描都在本地完成,程序本身不具备联网功能,不会上传任何文件信息。
从“存储已满”的提示说起
我接触这个工具的动机很实际:磁盘占用率逼近上限,开始找空间。最先翻到的是下载目录里一排“副本”“副本 (2)”“副本 (3)”,接着是各种 .bak、.tmp 残留。手动翻找效率太低,我需要一个能直接告诉我“哪些文件冗余、占了多少空间”的东西。
Czkawka 的思路就是如此:主窗口(当前推荐的前端叫 Krokiet)左侧列出 14 个工具,每个工具只需添加要扫描的目录、点一下扫描,结果就会按组返回。引擎用多线程并行读取文件,几百 GB 混合文件的目录我实测几分钟能跑完。
安装前,先选对版本
项目里只有一个共享的扫描核心(czkawka_core),前端分成几种形态,按用途挑即可:
| 前端 | 定位 | 备注 |
|---|---|---|
| Krokiet | 当前推荐的图形界面 | Slint 框架,自包含单一二进制,持续更新 |
| Czkawka CLI | 命令行版 | 面向脚本、服务器、定时任务 |
| Cedinia | 安卓端应用 | 因 Android 缺少 ffmpeg,视频类工具不可用 |
| Czkawka GUI(GTK) | 旧版界面 | 已冻结在 12.0,不再出新版本 |
桌面端直接用 Krokiet 就行,它是项目现在唯一持续投入的方向。官方提供预编译二进制,解压即用,不需要额外环境;Linux 下先给文件加执行权限,macOS 若提示“来自身份不明开发者”,右键选择打开即可。我踩过两个坑,提前说明:
- 窗口黑屏或渲染不出来:通常是显卡兼容问题,设置环境变量
SLINT_BACKEND=software用软件渲染启动,基本都能恢复; - Windows 杀毒软件可能对 Rust 编译的二进制报警:只要是从官方发布渠道下载,确认来源后可放行。
唯一需要额外安装依赖的功能是“相似视频”,需要系统里有 ffmpeg(Linux 用sudo apt install ffmpeg,macOS 用brew install ffmpeg)。其余功能开箱即用。更多安装与平台细节见 Krokiet 使用文档。
最快完成首次重复文件扫描
第一次使用按这四步走:
- 添加扫描路径。点操作栏的文件夹图标打开目录面板,把要检查的目录加进“包含路径”。默认排除规则已经跳过回收站、.git 等目录,所以直接扫整个用户目录也没问题;不想全盘扫就选几个大目录。
- 选“重复文件”工具。默认比对方式是按内容哈希(默认算法 Blake3),这是最可靠的一种;按文件名、按大小比对误报多,只适合快速摸底。
- 留意最小文件大小。Krokiet 默认忽略 16 KB 以下的文件,这是新手最容易疑惑的点:你确定存在的几个小文件重复项不出现在结果里。需要扫小文件的话,到设置里把最小尺寸调低。
- 看结果并选择处理方式。结果按“内容相同”分组,自动选择项(如“除最新外全选”)每组都会至少留一个文件,不会把整组清空。
两个默认行为值得知道:硬链接(多个文件名指向同一份内容)默认只算一个,不会误报为重复;符号链接不会被跟随,链接指向的重要文件不会因为扫描被牵连。
按场景挑对清理工具
相似图片:找出“不完全一样”的图
重复文件工具只认内容完全一致的哈希,而手机相册里更常见的情况是:同一张照片的不同分辨率版本、压缩过的转发版、带水印的截图。相似图片工具用感知哈希处理这类场景。Krokiet 的默认参数是最大差异 10、哈希尺寸 16、Mean 算法;如果结果里混进明显不同的图,把最大差异调到 4–5,或把哈希尺寸升到 32/64 并换 Gradient 算法。要连镜像翻转、旋转 90 度的版本也找出来,可以开启“几何不变性”,代价是扫描变慢。
重复音乐:标签还是内容
默认按标签(标题、艺术家)找重复,速度快;改成“指纹”模式则是解析音频内容做比对,能抓住改过文件名、没打标签的文件,但明显更慢。
相似视频:抽帧比对
原理是采样视频帧、按时间窗口做视觉哈希,需要系统先装好 ffmpeg。界面提供几档预设(近似相同/相似/电影长跳过),不用自己调一堆滑杆;找不到真正重复时,优先调大“扫描时长”和“窗口数”,而不是急着放松差异阈值。
小杂项一次说清
- 空文件夹:递归判断,子目录清空后父目录也会被连带找出来;
- 临时文件:匹配 .bak、.tmp、.crdownload 等常见残留模式,模式列表可改;
- 大文件:按数量列出最大的文件,适合“先砍掉最大的”式清理;
- 损坏文件:尝试用对应库打开音频、PDF、压缩包等,打不开就列出来——这类结果可能有误报,删除前自己先打开确认;
- 错误扩展名 / 错误文件名:按文件头魔数检测真实类型,结果里给出建议的新扩展名,可以直接一键重命名;
- Exif 清除:找出带 GPS、拍摄设备等元数据的图片,发布照片前用它脱敏很方便。
怎么保护原文件不被误伤
清理工具最大的风险不是“找不到”,而是“删错了”。Czkawka 给了三层保护:
参考路径。把目录加入后勾选该行的 Ref(参考)复选框,这个目录里的文件只参与比对、永远不可被删除或移动。典型用法:主图库设为参考路径,下载目录设为普通路径,扫完只删下载目录里的重复副本。注意一点:设置了参考路径后,只有包含至少一个参考文件的组才会显示,两组都在普通目录里的重复不会列出。
回收站与永久删除分开。操作栏上“移入回收站”和“删除”是两个独立按钮。网络盘(NFS、Samba)上回收站机制经常失效,遇到“删除 0 项”的报错,改用永久删除即可。
硬链接是折中方案。空间紧张但不敢删时,可以把重复文件替换为硬链接:多个名字指向同一份数据,磁盘只占一份。硬链接不能跨分区,跨分区的组会报错并保留原文件,不会造成数据丢失。
我的习惯是:批量操作前先用自动选择预览一遍选中项,确认参考目录里的文件一个都没被选中,再执行删除。
让第二次扫描变快
缓存是共享的。所有前端(GUI、CLI)共用同一份缓存,Linux 下位于~/.cache/czkawka/,存的是哈希、缩略图等计算结果而非文件内容,几百 TB 的量级也只会产生几百 MB 的缓存。扫过一次的文件再扫,速度提升明显。
prehash 两级哈希。Krokiet 默认开启:先算文件首尾一小段的快速部分哈希,排除掉“绝不可能是重复”的文件,再对剩下的算完整哈希。这是大目录里重复扫描变快的主要原因。
几个实用细节:
- 扫描中途点停止,已算出的哈希照样写入缓存,下次全量扫描仍然受益;
- 缓存加载变慢时,删掉对应的缓存文件(如
cache_similar_image_*.bin)即可,下次扫描会重建; - 线程数在设置里可调,CLI 里用
-T <数量>限制,CPU 占用想压低就调小; - 想把配置和缓存挪到 U 盘做便携版,设置环境变量
CZKAWKA_CONFIG_PATH和CZKAWKA_CACHE_PATH指到 U 盘路径即可,所有前端通用。
用 CLI 写定期清理脚本
GUI 之外,czkawka_cli 把全部工具做成了子命令,适合放进计划任务。先看两条最关键的命令:
czkawka_cli dup -d /home/user/Downloads -D AEN -Q czkawka_cli dup -d /home/user/Downloads -D AEN -y第一条是预演(-Q只打印将执行的操作,不动文件),第二条真正执行:-D AEN表示每组保留最新文件、处理其余副本,-y表示移入回收站而非永久删除。脚本里务必先跑预演再跑真删。
几个写脚本时常用的点:
- CLI 默认不会应用 GUI 的排除规则,跳过回收站要自己加
-E '$TRASH'(加引号防止 shell 展开),想套用 GUI 全套默认排除用-E DEFAULT; -p输出格式化 JSON,方便交给其他脚本处理;- 退出码有讲究:0 表示没找到,11 表示找到了匹配项,写自动化判断时别按 0/1 处理;
- 参数速查看 CLI 指令文档,完整标志表都在里面。
回到最初的问题:空间满了以后怎么办。现在的答案是——先让 Czkawka 告诉你空间被谁占着(重复文件、临时残留、失效链接、膨胀的大文件),用参考路径圈住不能动的原件,把可恢复的移进回收站,再把重复扫描交给 CLI 定期跑。工具本身不联网、MIT 许可(核心库)开源可审计,剩下的只是每周花十分钟看一眼结果。
遇到窗口黑屏、ffmpeg 找不到、Flatpak 包过时这类具体问题,项目自带一份从真实 issue 整理出来的 FAQ,比我这里写得更全。
【免费下载链接】czkawkaMulti functional app to find duplicates, empty folders, similar images etc.项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考