重复文件清理工具最危险的不是漏扫,而是误删
目录
最近我在做Find Duplicate Files,一个macOS上的重复文件和相似照片清理工具。
一开始我觉得这个软件的流程很简单,选择文件夹、扫描重复文件、选中多余的文件再删除就可以了。
真正做下去之后发现,扫描速度和能找出多少重复文件都不是最危险的问题,最危险的是误删。
重复文件少找到几个,最多只是少清理一点空间。如果把唯一的一份文件删掉,可能就没有办法恢复了。
重复文件和相似照片不是一回事
完全重复的文件可以比较大小和文件内容,最后用完整哈希确认。两个文件的完整哈希一样,才可以认为内容相同。
相似照片不一样。两张照片看起来接近,可能是一张原图和一张压缩图,也可能是连拍、裁剪、调色或不同分辨率的版本。
它们有可能是多余的,也有可能都需要保留。
所以相似照片只能作为整理建议,不能因为系统把它们放在一组里,就自动认定其中一张应该删除。
只扫描用户选择的位置
Find Duplicate Files不会自己扫描整台电脑,文件夹扫描只访问用户主动选择的目录。
照片图库也只用于只读扫描,不能直接在里面执行清理。
我觉得这个范围很重要。清理工具不应该因为获得了文件权限,就默认可以检查和修改所有位置。
用户选了什么目录,软件就只处理什么目录。
扫描结果必须可以复核
扫描完成后不能直接出现一个“一键全部删除”。用户应该先看到每组文件的名称、路径、大小和准备保留的文件。
有时候两个文件内容一样,但位置代表的意义不一样。例如一个在项目资料里,一个在临时下载目录里。即使可以删除其中一份,也应该由用户决定保留哪一份。
真正执行前还要再显示一次准备处理的文件和占用空间,取消按钮应该比确认按钮更容易找到。
多一次确认看起来比较麻烦,但清理文件本来就不适合追求操作次数最少。
删除前再检查一次
扫描结果不是永远有效的。
用户完成扫描后,文件可能被修改、移动或替换。如果软件继续按旧结果清理,就可能处理错误的文件。
所以在确认清理后,软件还要重新检查准备处理的文件。完全重复文件重新确认完整哈希,相似照片也要确认它们仍然符合当时的相似条件。
如果校验失败,就停止清理,让用户重新扫描。
我认为宁可让用户多等一次,也不能拿已经过期的扫描结果继续删除。
先移动,再考虑放进废纸篓
软件可以把选中的文件移到一个单独的隔离目录,用户确认其他软件和项目都没有受到影响后,再自己决定是否删除。
直接清理时也是移动到macOS废纸篓,不做无法恢复的永久删除。
隔离目录比较适合文件很多、自己也不能马上确认的情况。先放几天,再检查项目、照片和备份是否正常,比扫描结束后立即清空更稳妥。
历史记录也不能完全相信
Find Duplicate Files会保存扫描历史,方便以后查看之前的结果和空间变化。
但是历史记录保存的是当时的文件状态,不能因为它是软件自己生成的,就一直把它当成可信数据。
扫描快照保存时会记录SHA256。以后重新打开时再计算一次,如果内容和保存时不一样,就只允许查看,不允许选择文件和执行清理。
旧版本没有校验信息的历史记录也按不可信处理。
这样即使快照被修改、损坏或者来自旧版本,也不会直接变成一次可以执行的删除操作。
软件清理自己的记录也要限制范围
扫描历史数量多了以后,软件会清理旧快照。这里也有一个容易忽略的问题:历史记录里的路径如果被污染,会不会让软件删到其他位置?
所以删除旧快照前要同时确认:
- 文件必须位于软件自己的ScanHistory目录。
- 文件名必须符合扫描快照的固定格式。
- 目标必须是普通文件,不能是目录。
只要有一项不符合,就不执行删除。
这个检查清理的只是软件自己的临时记录,但同样应该按照处理用户文件的标准来限制范围。
我的结论
重复文件清理工具不能只比较扫描速度、能找出多少文件和可以释放多少空间。
更重要的是它怎样证明这些文件可以处理、怎样让用户复核、扫描结果过期后会不会停止,以及出错时还能不能恢复。
我做Find Duplicate Files时会继续保持这个原则:可以少清理一些,也可以让操作多一步,但不能为了看起来方便,就把不确定的文件自动删除。
系列:note
该系列自动来自分类: note
- Gemini 3.6 Flash完美弥补了Codex 5.6
- macOS 外置硬盘为什么会出现 ._* 文件
- 小众工具软件应该免费、买断还是订阅
- 用iPhone和iPad维护Git静态网站可行吗
- 一个Mac截图工具,从能截图到能上架还差多远
- 重复文件清理工具最危险的不是漏扫,而是误删 (当前)
- 备份dokuwiki数据
- grep 命令
- zola的Front Matter完整字段的意思
- 从dokuwiki切换到quartz
- 安装immich记录
- 修改dokuwiki时区
- macos安装dokuwiki
- Debian创建新用户和设置防火墙
- mac在Debian安装wireguard和使用
- 再也不买不能解bl的手机了
- Firefox设置
- debian安装FFmpeg来合并youtube音频
- css 扩散列表
- 两个练习
- css RWD
- css 图片
- css 提示
- css 下拉
- css 表单
- css 导航栏
- css 单词
- HTML SVG
- HTML Canvas
- HTML input
- HTML 结构
- 电气施工图说明
- china uses dropbox
- Nginx installs SSL certificates
- debian install shadowsocks
- Visual studio code set the python environment
- install hexo