V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
dcsuibian
V2EX  ›  分享创造

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

  •  
  •   dcsuibian · 32 天前 · 1268 次点击
    这是一个创建于 32 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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. 支持实时进度显示

    原理:

    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 生成代码的方式来计算文件夹的哈希值,但是可能就没有上述的几点优势了。

    4 条回复    2025-08-14 22:03:09 +08:00
    AX5N
        1
    AX5N  
       32 天前
    `快`——单线程的吞吐量是多少?(每秒多少 MB 或者 GB )
    dcsuibian
        2
    dcsuibian  
    OP
       32 天前
    @AX5N
    这里的快指的不是计算速度的快。而是整体的快。
    我测试了下
    一个我的文件夹,里面都是细碎文件,大小 2.55GB ,占用空间 2.57GB ,16819 个文件
    如果都只算 SHA-256 ,HashMyFiles 从用户操作的最后一步(点击 OK )到最终计算完成时 59.73 秒
    我这个 4 线程的话,只需要 35.08 秒(缓存已清空)
    如果是单线程,需要 46.94 秒(缓存已清空)

    当然 HashMyFiles 还有什么重复项显示之类的,另外我也没看到他的并行选项。
    具体哈希我是直接调库的。我没有对这方面进行优化。主要是我感觉大部分时间不是 CPU 处理的不够快,而是磁盘没跟上。
    AX5N
        3
    AX5N  
       32 天前   ❤️ 1
    @dcsuibian
    细碎的文件的瓶颈当然是 io 的随机读写能力,但是你这 30T 里面绝对是大文件居多,这时影响速度的因素 cpu 和磁盘 io 可能就一半一半了。
    据我所知快的算法和慢的至少能有 30~50 倍的差距。你可以估一下,这个差距能差多少时间。
    dcsuibian
        4
    dcsuibian  
    OP
       32 天前
    @AX5N
    这个我倒确实没想过
    30T 存 NAS 了,我当时看的时候能跑满我家的 2.5G 网就没再进一步测试
    这样想来确实还应该有优化空间
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1038 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:18 · PVG 03:18 · LAX 12:18 · JFK 15:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.