gpt4 book ai didi

linux - 为什么相同的内容会压缩到不同的文件中,即使是 `-X`?

转载 作者:太空狗 更新时间:2023-10-29 12:25:24 27 4
gpt4 key购买 nike

那么,让我们创建两个相同的(空)文件。我们必须将它们放在不同的目录中,否则它们不能以相同的文件名共存:

$ mkdir a b
$ touch a/1
$ touch b/1

(注意:不要在单个命令中执行 $ touch a/1 b/1,因为那样文件创建时间戳可能相同,此实验将无法进行)

我们可以确认这些文件是相同的:

$ md5sum a/1 b/1
d41d8cd98f00b204e9800998ecf8427e a/1
d41d8cd98f00b204e9800998ecf8427e b/1

现在我要将这两个文件分别压缩到它们自己的存档中。我要将 -X 标志传递给 zip,这会导致它忽略文件属性,如创建/修改时间,这应该是这两者之间的唯一区别文件。请注意,我在每个子目录中运行 zip,以便相对路径也相同。

$ cd a && zip -X ../a.zip 1 && cd -
$ cd b && zip -X ../b.zip 1 && cd -

我希望 a.zipb.zip 完全相同,但奇怪的是:

$ md5sum a.zip b.zip
9dedfd0e992695d002c65992452e921c a.zip
49079421fec66cf71969024a06cfd69a b.zip

如果我比较 zip 文件的十六进制转储,我最终会得到

$ xxd a.zip > a.bin && xxd b.zip > b.bin && diff a.bin b.bin
1c1
< 00000000: 504b 0304 0a00 0000 0000 8f81 764a 0000 PK..........vJ..
---
> 00000000: 504b 0304 0a00 0000 0000 9081 764a 0000 PK..........vJ..
3c3
< 00000020: 4b01 021e 030a 0000 0000 008f 8176 4a00 K............vJ.
---
> 00000020: 4b01 021e 030a 0000 0000 0090 8176 4a00 K............vJ.

但我对 zip 二进制格式的理解还不够深入,无法在脑海中进行解释。不用说,提取这两个文件会产生相同的文件。

有人知道为什么会这样吗? -X 标志显然具有一些效果,因为如果我在上面的实验中省略它,生成的 zip 的差异甚至比这里的差异更大。

我只在 Linux 上用 ext4 文件系统测试过这个;我不确定 OS X 或其他文件系统是否会以同样的方式运行。

最佳答案

I'm going to pass the -X flag to zip, which causes it to ignore file attributes like the creation/modification time

它忽略的是额外 属性。

标准属性不受影响。这些是文件名、文件类型、修改日期/时间、CRC 和未压缩大小等内容。

额外的属性是系统特定的扩展,如 Linux 的 UID、GID、atime 和纪元时间的 mtime。

其他操作系统对他们关心的属性有其他扩展,例如 Windows NT 安全描述符或 OS/2 特定的 ACL。

-X 标志去除了这些额外的属性,让您拥有最小的公分母。

关于linux - 为什么相同的内容会压缩到不同的文件中,即使是 `-X`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42961946/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com