YoHasher:一个简单的文件夹哈希工具,适用于 Chrome - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
dcsuibian
V2EX    分享创造

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

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

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

    当然 HashMyFiles 还有什么重复项显示之类的,另外我也没看到他的并行选项。
    具体哈希我是直接调库的。我没有对这方面进行优化。主要是我感觉大部分时间不是 CPU 处理的不够快,而是磁盘没跟上。
    AX5N
        3
    AX5N  
       56 天前   1
    @dcsuibian
    细碎的文件的瓶颈当然是 io 的随机读写能力,但是你这 30T 里面绝对是大文件居多,这时影响速度的因素 cpu 和磁盘 io 可能就一半一半了。
    据我所知快的算法和慢的至少能有 30~50 倍的差距。你可以估一下,这个差距能差多少时间。
    dcsuibian
        4
    dcsuibian  
    OP
       56 天前
    @AX5N
    这个我倒确实没想过
    30T 存 NAS 了,我当时看的时候能跑满我家的 2.5G 网就没再进一步测试
    这样想来确实还应该有优化空间
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     893 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 20:00 PVG 04:00 LAX 13:00 JFK 16:00
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86