GitHub 地址: https://github.com/dcsuibian/yohasher
最近在做数据迁移( 30 多 T ),担心传输的过程中出现文件损坏打不开的情况,就做了个递归计算文件夹文件哈希值的小工具。跟 HashMyFiles 这个软件的核心差不多。
优势:
- 针对大文件夹(文件大、目录项多的文件夹)进行优化
- 所有计算皆在用户端浏览器本地进行,不上传任何数据
- 支持 MD5/SHA-1/SHA-256 (我觉得不给用户太多选择比较好,所以只留了这三个)
- 持多线程并行读取并哈希(适合 SSD )
- 支持文件夹断点续哈(会从最后一个完成哈希的文件后重新哈希,但不支持单个文件的断点续哈)
- 支持 JSON 和 Excel 格式导出
- 支持实时进度显示
- 快
原理:
- 使用浏览器的 File System API 。与
webkitRelativePath相比,不需要等待浏览器检索完所有文件后再开始哈希。 - 使用 IndexedDB 。将用户的多种哈希值全部存入本地浏览器内,用于断点续哈。
清空缓存按钮即清空 IndexedDB 。 - 使用 WebWorker 和hash-wasm,主要是用于多线程读取文件(机械硬盘可能不适合)。流式哈希,不需要把文件整体加载到内存。
缺点:
- 需要浏览器支持 File System API 等新技术,建议最新版 Chrome
- 对于相同的文件路径,会被视为同一个文件跳过哈希。比如你第一次选了
D:/tohashes,第二次选了E:/tohashes。 - 如果文件访问出错。目前只会在浏览器控制台输出错误信息并跳过,没有提示。
- 没有文件检索,也不显示文件列表。这一点主要是为了避免大量 DOM 元素导致页面卡顿。
- 没有预估完成时间与速度显示
- 所有文件大小只以字节数展示
- 目前不支持选择单个文件
定位:
这个工具的作用主要是帮你做好“得到所有文件的哈希值”这一步。
你拿到哈希值以后可以再进行文件校验、比较、去重等,但此工具不涉及这些。我自己的用途上面已经说了,所以至少对我来说是有用的(虽然使用频次也不会很高)。
你也可以直接用命令行工具或者 AI 生成代码的方式来计算文件夹的哈希值,但是可能就没有上述的几点优势了。