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

Posted

技术标签:

【中文标题】通过命令“pv”压缩的文件与普通压缩文件不同【英文标题】:file compressed through command "pv" are different from ordinary compressed file 【发布时间】:2020-12-03 10:11:35 【问题描述】:

这是我的脚本:

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

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

diff pv.tar.gz nopv.tar.gz

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

我执行hexdump

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

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

nopv.tar.gz: 8b1f 0008 9c18 5fc8 0304 bdec 5f7b c71b

但是我解压后又对比了一下,testdir是一模一样的。

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

【问题讨论】:

您的 hexdump 看起来有问题。前 4 个字节应该是 8b 1f 08 00,而不是 ...00 08。你能确认是你打错了,还是有其他问题。 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于通过命令“pv”压缩的文件与普通压缩文件不同的主要内容,如果未能解决你的问题,请参考以下文章

winrar 命令行 参数

第8章:Shell脚本归档与压缩

Linux gzip命令:压缩文件或目录

Linux命令(31):zip/unzip命令-打包压缩

Linux学习之文件的压缩与解压

压缩打包介绍,gzipbzip2xz压缩工具