拆分 tarball 的压缩率
Compression ratio for split tarballs
我有一个很大的 tarball,它被分成几个文件。 tarball 是 100GB 分成 12GB 文件。
tar czf - -T myDirList.txt | split --bytes=12GB - my.tar.gz.
正在尝试 cat my.tar.gz.* | gzip -l
returns
compressed uncompressed ratio uncompressed_name
-1 -1 0.0% stdout
正在尝试 gzip -l my.tar.gz.aa
returns
compressed uncompressed ratio uncompressed_name
12000000000 3488460670 -244.0% my.tar
连接文件 cat my.tar.gz.* > my.tar.gz
returns 甚至更糟糕的答案
compressed uncompressed ratio uncompressed_name
103614559077 2375907328 -4261.1% my.tar
这是怎么回事?我怎样才能得到这些拆分 tarball 的真实压缩率?
gzip 格式将未压缩的大小存储为流的最后四个字节。 gzip -l
使用这四个字节和 gzip 文件的长度来计算压缩率。这样做时,gzip 会查找输入的末尾以获取最后四个字节。请注意,四个字节最多只能表示 4 GB - 1.
在第一种情况下,您无法在管道输入上查找,因此 gzip 放弃并报告 -1。
在你的第二种情况下,gzip 将提取四个字节的压缩数据,实际上是四个随机字节,作为未压缩的大小,它必然小于 12,000,000,000,因此报告了负压缩率(扩展)。
在你的第三种情况下,gzip 得到的是实际未压缩的长度,但该长度模 232,这必然要少得多超过 103 GB,报告了更显着的负压缩率。
第二种情况是无望的,但是第一种和第三种情况的压缩率可以使用pigz来确定,gzip的并行实现使用多核进行压缩。 pigz -lt
解压缩输入而不存储它,以便直接确定未压缩的字节数。 (pigz -l
和gzip -l
一样,也不行,需要t
测试,即解压不保存。)
我有一个很大的 tarball,它被分成几个文件。 tarball 是 100GB 分成 12GB 文件。
tar czf - -T myDirList.txt | split --bytes=12GB - my.tar.gz.
正在尝试 cat my.tar.gz.* | gzip -l
returns
compressed uncompressed ratio uncompressed_name
-1 -1 0.0% stdout
正在尝试 gzip -l my.tar.gz.aa
returns
compressed uncompressed ratio uncompressed_name
12000000000 3488460670 -244.0% my.tar
连接文件 cat my.tar.gz.* > my.tar.gz
returns 甚至更糟糕的答案
compressed uncompressed ratio uncompressed_name
103614559077 2375907328 -4261.1% my.tar
这是怎么回事?我怎样才能得到这些拆分 tarball 的真实压缩率?
gzip 格式将未压缩的大小存储为流的最后四个字节。 gzip -l
使用这四个字节和 gzip 文件的长度来计算压缩率。这样做时,gzip 会查找输入的末尾以获取最后四个字节。请注意,四个字节最多只能表示 4 GB - 1.
在第一种情况下,您无法在管道输入上查找,因此 gzip 放弃并报告 -1。
在你的第二种情况下,gzip 将提取四个字节的压缩数据,实际上是四个随机字节,作为未压缩的大小,它必然小于 12,000,000,000,因此报告了负压缩率(扩展)。
在你的第三种情况下,gzip 得到的是实际未压缩的长度,但该长度模 232,这必然要少得多超过 103 GB,报告了更显着的负压缩率。
第二种情况是无望的,但是第一种和第三种情况的压缩率可以使用pigz来确定,gzip的并行实现使用多核进行压缩。 pigz -lt
解压缩输入而不存储它,以便直接确定未压缩的字节数。 (pigz -l
和gzip -l
一样,也不行,需要t
测试,即解压不保存。)