在linux中压缩文件夹会为不同的用户提供不同的大小

时间:2017-08-02 00:24:37

标签: linux unix zip gzip tar

我有一个文件夹,我想创建tgz文件并计算其sha256:

使用以下命令将文件夹转换为tgz

 "tar -c -C #{Shellwords.escape dir} #{Shellwords.escape basename} " \
        "--owner=0 --group=0 --mtime='2000-01-01 00:00:00' | gzip -n > #{Shellwords.escape file}"

现在我使用2个不同的用户运行上述过程,它给了我2个文件:1和2

两个tgz文件的大小不同:

-rw-r--r--@ 1 myuser  \Domain Users  9024 Jul 31 14:28 1.tgz
-rw-r--r--@ 1 myuser  \Domain Users  9037 Jul 31 14:29 2.tgz

如果我尝试在文件之间计算差异,我没有看到使用以下命令获得任何diff.Diff。

diff  <(tar -tvf 1.tgz | sort) <(tar -tvf 2.tgz | sort)

如果我使用这两个文件的ruby计算sha256,那么它就不同了。

问题是:为什么我在从不同用户运行时会对tgz文件产生影响。

1 个答案:

答案 0 :(得分:0)

差异在标题中,tar中每个文件的标题包含用户和组ID。见https://en.wikipedia.org/wiki/Tar_(computing)#Header

此外,现代tar会在标题中添加名为Ustar的其他数据:https://en.wikipedia.org/wiki/Tar_(computing)#UStar_format 其中还包含所有者用户名。

尝试:

diff  <(gunzip -c 1.tgz | xxd) <(gunzip -c 1.tgz | xxd)

你会看到差异