通过命令"pv"压缩的文件与普通压缩文件不同

file compressed through command "pv" are different from ordinary compressed file

这是我的脚本:

tar cf - testdir | pv -s $(du -sb testdir | awk '{print }') | pigz -1 > pv.tar.gz

tar cf - testdir | pigz -1 > nopv.tar.gz

diff pv.tar.gz nopv.tar.gz

然后输出是“二进制文件 pv.tar.gz 和没有 pv.tar.gz 不同”。

我执行hexdump

而且我发现这两个文件只有第一行略有不同

pv.tar.gz: 8b1f 0008 9e24 5fc8 0304 bdec 5f7b c71b

没有pv.tar.gz: 8b1f 0008 9c18 5fc8 0304 bdec 5f7b c71b

但是我解压后对比了一下,testdir完全一样

我想问的是,如何让两个tar.gz文件保持一致?

这与 pv 无关。 gzip header 中的字节 5 到 8 是时间戳。每次您 运行 命令时都会有所不同。你可以告诉 pigz 不要用 -m 开关存储它,所以你的命令是:

tar cf - testdir | pv -s $(du -sb testdir | awk '{print }') | pigz -1 -m > pv.tar.gz

tar cf - testdir | pigz -1 -m > nopv.tar.gz

应该会给你相同的内容。当您 hexdump 时,您会注意到更改的值现在都是 00