文件夹在你的浏览器里读取,不上传任何内容。
关于这个重复文件查找工具
重复文件是悄悄堆起来的。你「以防万一」复制了一份照片文件夹,下载跑了两遍留下 发票 (1).pdf,备份还原到了错误的位置 —— 几年后,硬盘里塞满了你早就有的文件。这个工具能把它们找出来:选一个文件夹,它就会报告每一组完全相同的文件,各有几份,以及你能腾出多少空间。
相同指的是逐字节一致,不是「看起来像」。同一瞬间拍的两张照片是两个不同的文件,永远不会被判为重复;同一个文件的两份拷贝则一定会,无论它们叫什么名字、放在哪个子文件夹里。
文件夹在浏览器内部读取。不上传任何内容,而且工具只有只读权限 —— 它无法删除任何东西,这正是它交给你一份清单去核对、而不是悄悄清理的原因。
它如何判定两个文件相同
在大文件夹里把每个文件和其他所有文件逐一比对会没完没了,所以它分三轮进行,每一轮都丢掉一批工作。
- 先看大小。 长度不同的两个文件不可能完全相同。仅此一项就能排除一个普通文件夹里的绝大多数,而且不花代价 —— 大小本来就已知
- 再看前 64 KB。 大小相同但内容不同的文件,差异通常出现在开头附近:相机的 JPEG、带填充的压缩包、同一模板做出的文档。只对开头做哈希就能把它们分开,无需读取其余部分
- 最后看整个文件。 只针对仍然一致的少数几个,于是昂贵的读取只落在真正的候选上,别无其他
哈希算法是 SHA-256,由浏览器内置的加密功能计算。两个不同的文件要被判为重复,就得共用同一个 256 位摘要 —— 现实中不会发生。
使用方法
- 点击选择文件夹,选中要检查的那一个。浏览器会询问你是否允许读取
- 等待各轮完成 —— 进度条对应的是哈希计算,也就是最慢的那一步
- 查看分组。 每一组都列出找到的副本,并标出要保留的那一份
- 选择保留哪一份 —— 最新、最旧、路径最短,或离顶层文件夹最近
- 带走结果 —— 复制清单、下载 CSV,或者下载删除脚本
保留哪一份
哪个文件更要紧,工具从不替你决定;它只是给每组标出一份「保留」,让其余的一目了然。
- 最新的 —— 保留最后修改过的那份。如果你一直在一个位置工作,通常选这个
- 最旧的 —— 保留原件。当副本是由会重置时间戳的软件生成时很有用
- 路径最短的 —— 保留层级最浅的那份,通常是真正的存放位置,而不是备份文件夹
- 离顶层文件夹最近的 —— 保留最靠近你所选文件夹的那份
切换这一项只会重新标注分组,不会重新扫描,所以可以随时来回比较。
缩小查找范围
- 忽略小于此大小的文件(KB) —— 跳过小文件。源代码或缩略图文件夹里会有成百上千个毫无意义的同一小文件;填 100 就只看值得回收的部分
- 仅这些类型 —— 照片填 jpg, png,视频填 mp4, mov,文档填 pdf。点号可省略,不区分大小写
零字节文件始终会被排除。任何空文件与其他空文件都是逐字节相同的,报告它们会把真正的结果淹没。
删除脚本
删除是这里唯一真正不可逆的操作,所以脚本送到你手上时每一条删除命令都是注释状态。你打开它、读一遍清单、把真正想执行那几行前面的 REM(Windows)或 #(Mac 和 Linux)去掉,然后自己运行。在那之前什么也不会发生。
这是刻意的。一个点一下按钮就能删除你电脑文件的网页,无论代码多谨慎都不是好主意 —— 所以这个页面做不到,最后一步归你。
可以用来做什么
- 为多年在电脑之间来回复制的照片盘腾出空间
- 清理塞满 file (1).pdf、file (2).pdf 的下载文件夹
- 找出同一音乐库多次导入造成的重复曲目
- 检查备份文件夹是不是留着你从未删除过的东西的第二份
- 在买更大的硬盘之前,弄清究竟是什么占满了空间
浏览器读取文件夹的两种方式
Chrome、Edge 和 Opera 提供真正的文件夹选择器。工具自己遍历文件夹,并通过句柄直接读取每个文件的字节 —— 这是最快的方式,也是唯一能看到空子文件夹的方式。
Firefox 和 Safari 使用较旧的文件夹上传控件。浏览器一次性交出目录树中的全部文件。重复判定的方式完全一样,每个文件仍在页面内读取和哈希,但整棵树会先加载完毕,因此非常大的文件夹需要更久才能开始。
需要知道的
- 不上传任何内容。读取和哈希都在页面内完成 —— 你可以打开网络面板自行查看
- 工具拥有的是只读权限。它不能创建、重命名、移动或删除任何一个文件
- 哈希会读取每个候选文件,所以当文件夹里有很多同样大小的大文件时会比较慢。大小与开头两轮的存在,正是为了让这种情况变得罕见
- 超大文件夹以 200,000 项为上限,以免页面卡死
- 浏览器打不开的文件(被锁定、正在使用,或位于受保护的系统文件夹中)会被跳过,而不是错误地报告
- CSV 带有字节顺序标记,中文和其他非拉丁文件名在 Excel 中也能正确显示