YoHasher:一个简单的文件夹哈希工具,适用于 Chrome

2025 年 8 月 14 日
 dcsuibian

GitHub 地址: https://github.com/dcsuibian/yohasher

网址: https://yohasher.com/

最近在做数据迁移( 30 多 T ),担心传输的过程中出现文件损坏打不开的情况,就做了个递归计算文件夹文件哈希值的小工具。跟 HashMyFiles 这个软件的核心差不多。

优势:

  1. 针对大文件夹(文件大、目录项多的文件夹)进行优化
  2. 所有计算皆在用户端浏览器本地进行,不上传任何数据
  3. 支持 MD5/SHA-1/SHA-256 (我觉得不给用户太多选择比较好,所以只留了这三个)
  4. 持多线程并行读取并哈希(适合 SSD )
  5. 支持文件夹断点续哈(会从最后一个完成哈希的文件后重新哈希,但不支持单个文件的断点续哈)
  6. 支持 JSON 和 Excel 格式导出
  7. 支持实时进度显示
  8. 快

原理:

  1. 使用浏览器的 File System API 。与webkitRelativePath相比,不需要等待浏览器检索完所有文件后再开始哈希。
  2. 使用 IndexedDB 。将用户的多种哈希值全部存入本地浏览器内,用于断点续哈。清空缓存按钮即清空 IndexedDB 。
  3. 使用 WebWorker 和hash-wasm,主要是用于多线程读取文件(机械硬盘可能不适合)。流式哈希,不需要把文件整体加载到内存。

缺点:

  1. 需要浏览器支持 File System API 等新技术,建议最新版 Chrome
  2. 对于相同的文件路径,会被视为同一个文件跳过哈希。比如你第一次选了D:/tohashes,第二次选了E:/tohashes。
  3. 如果文件访问出错。目前只会在浏览器控制台输出错误信息并跳过,没有提示。
  4. 没有文件检索,也不显示文件列表。这一点主要是为了避免大量 DOM 元素导致页面卡顿。
  5. 没有预估完成时间与速度显示
  6. 所有文件大小只以字节数展示
  7. 目前不支持选择单个文件

定位:

这个工具的作用主要是帮你做好“得到所有文件的哈希值”这一步。

你拿到哈希值以后可以再进行文件校验、比较、去重等,但此工具不涉及这些。我自己的用途上面已经说了,所以至少对我来说是有用的(虽然使用频次也不会很高)。

你也可以直接用命令行工具或者 AI 生成代码的方式来计算文件夹的哈希值,但是可能就没有上述的几点优势了。

2288 次点击
所在节点    分享创造
4 条回复
AX5N
2025 年 8 月 14 日
`快`——单线程的吞吐量是多少?(每秒多少 MB 或者 GB )
dcsuibian
2025 年 8 月 14 日
@AX5N
这里的快指的不是计算速度的快。而是整体的快。
我测试了下
一个我的文件夹,里面都是细碎文件,大小 2.55GB ,占用空间 2.57GB ,16819 个文件
如果都只算 SHA-256 ,HashMyFiles 从用户操作的最后一步(点击 OK )到最终计算完成时 59.73 秒
我这个 4 线程的话,只需要 35.08 秒(缓存已清空)
如果是单线程,需要 46.94 秒(缓存已清空)

当然 HashMyFiles 还有什么重复项显示之类的,另外我也没看到他的并行选项。
具体哈希我是直接调库的。我没有对这方面进行优化。主要是我感觉大部分时间不是 CPU 处理的不够快,而是磁盘没跟上。
AX5N
2025 年 8 月 14 日
@dcsuibian
细碎的文件的瓶颈当然是 io 的随机读写能力,但是你这 30T 里面绝对是大文件居多,这时影响速度的因素 cpu 和磁盘 io 可能就一半一半了。
据我所知快的算法和慢的至少能有 30~50 倍的差距。你可以估一下,这个差距能差多少时间。
dcsuibian
2025 年 8 月 14 日
@AX5N
这个我倒确实没想过
30T 存 NAS 了,我当时看的时候能跑满我家的 2.5G 网就没再进一步测试
这样想来确实还应该有优化空间

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1152286

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX