V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
nanoha
V2EX  ›  程序员

为什么同一个文件在不同文件夹下压缩后 md5 不一致?

  •  
  •   nanoha · Dec 16, 2019 · 5551 views
    This topic created in 2330 days ago, the information mentioned may be changed or developed.

    win10 环境

    想下个游戏补丁但是没法官方下 只能在其他源找了两个 然后比较一下 md5 校验下 由于 md5 不一致所以自己拆看压缩包一点一点对比 最后发现了以下情况

    同一个文件 复制一下放在不同位置的文件夹下 比如文件叫 aaa.exe 然后复制后分别放在放在 C:/outer/inner 和 D:/outer/inner

    1.直接对两个文件做 md5 计算 结果一样 2.将两个不同位置的 inner 文件夹进行压缩(用的 windows 自带的发送到 zip 压缩)后对压缩后的 inner.zip 进行 md5 计算 结果一样 3.将两个不同位置的 outer 文件夹进行压缩 压缩后的 outer.zip 计算 md5 结果不一样

    1 和 2 很好理解 但是 3 是为啥 超出了我的理解

    已经勾选了 windows 显示隐藏文件那个 没有任何隐藏文件

    16 replies    2019-12-16 16:07:55 +08:00
    1OF7G
        1
    1OF7G  
       Dec 16, 2019
    压缩包可能有一些其它冗余信息,比如文件属性或者压缩包的 meta 之类的。
    你要对比两个文件夹相同,那应该递归对比里边的所有文件,而不是把文件夹压缩后对比。
    nanoha
        2
    nanoha  
    OP
       Dec 16, 2019
    @1OF7G 我后来确实用 powershell 的命令对比了一下里面的所有文件 md5 一致 但是我挺好奇为啥上面提到的 3 那种情况会发生 如果是压缩会产生一些额外信息的话 为什么情况 2 中的那样单层文件夹压缩的 md5 却是一致的
    shijianit
        3
    shijianit  
       Dec 16, 2019
    按道理,同一个文件,压缩 2 次,2 个 zip 的 md5 应该也不一样的吧
    Rekkles
        4
    Rekkles  
       Dec 16, 2019
    Mac 系统下面会在文件夹属性里面存在一个 Access Time,每次访问都会 update 会导致属性变化 如果使用 zip 命令加上参数 -X 或者 --no-extra,Win 下面应该也会有类似的属性,建议 google 一下
    1OF7G
        5
    1OF7G  
       Dec 16, 2019
    @nanoha 这个为什么,依赖于压缩软件的实现方式,只有看文档或源码才能解释。有可能的一点是,inner 文件夹的创建 /修改 /访问 等等属性相同,而 outer 的不相同。
    nanoha
        6
    nanoha  
    OP
       Dec 16, 2019
    @shijianit 实际上在 windows 下 上面提到的情况 2 两个的 md5 是一样的。。。
    nanoha
        7
    nanoha  
    OP
       Dec 16, 2019
    @1OF7G 你这么一说我好像有点头绪了 我记得 win7 之后好多文件夹是自带一些属性的(例如多媒体之类的)可能是这个 outer 放在不同位置导致创建时默认的类型不一致(大概。。。
    jasonyang9
        8
    jasonyang9  
       Dec 16, 2019
    难不成是吧目录信息带进去了?
    nanoha
        9
    nanoha  
    OP
       Dec 16, 2019
    @jasonyang9 我用的都是 windows 自带的那个右键菜单里面的“发送到-zip 压缩” 按理来说 压缩时使用的参数是一样的 就算真是目录信息不一致 感觉也不能解释情况 2
    wangyzj
        10
    wangyzj  
       Dec 16, 2019   ❤️ 1
    压缩不仅仅是计算了文件内容把
    应该还有创建时间和修改时间吧
    毕竟压缩包里面要显示这些信息的
    nanoha
        11
    nanoha  
    OP
       Dec 16, 2019
    @wangyzj 有道理 我记不清当时那个 outer 和 inner 文件夹是创建的还是拖过去的了 可能是 inner 我是拖过去的但是 outer 是新创建的
    Vegetable
        12
    Vegetable  
       Dec 16, 2019
    当然不一样,因为压缩包最起码最起码保存了文件夹创建时间.
    Vegetable
        13
    Vegetable  
       Dec 16, 2019   ❤️ 1
    ~/zip ⌚ 15:32:13
    $ unzip -l 2/2.zip
    Archive: 2/2.zip
    Length Date Time Name
    --------- ---------- ----- ----
    0 2019-12-16 15:26 a/
    0 2019-12-16 15:26 a/1.txt
    --------- -------
    0 2 files

    ~/zip ⌚ 15:32:15
    $ unzip -l 1/1.zip
    Archive: 1/1.zip
    Length Date Time Name
    --------- ---------- ----- ----
    0 2019-12-16 15:25 a/
    0 2019-12-16 15:25 a/1.txt
    --------- -------
    0 2 files
    nanoha
        14
    nanoha  
    OP
       Dec 16, 2019
    @Vegetable 经过你和楼上几位老哥解释明白了 是文件夹信息导致的 我当时只想到目录结构 没考虑到文件夹时间等等问题
    bigtwo
        15
    bigtwo  
       Dec 16, 2019
    看是不是系统问题,将硬盘挂载到另外一个系统试下,
    我曾经也遇到过,本来以为是硬盘或内存的问题,但弄了半天还是一样,仔细一想系统自带软校验怎么都不可能是硬件问题,然后换了个系统正常了(杀毒没找到,估计是系统内核文件缺失)
    crab
        16
    crab  
       Dec 16, 2019
    压缩的文件保存了 ntfs 时间戳信息
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   792 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 20:26 · PVG 04:26 · LAX 13:26 · JFK 16:26
    ♥ Do have faith in what you're doing.