Compression 分离沥青球的压缩比

Compression 分离沥青球的压缩比,compression,gzip,tar,Compression,Gzip,Tar,我有一个大的tarball,它被分成了几个文件。tarball将100GB文件拆分为12GB文件 tar czf - -T myDirList.txt | split --bytes=12GB - my.tar.gz. 尝试cat my.tar.gz.*gzip-l返回 compressed uncompressed ratio uncompressed_name -1 -1 0.0% stdout compress

我有一个大的tarball,它被分成了几个文件。tarball将100GB文件拆分为12GB文件

tar czf - -T myDirList.txt | split --bytes=12GB - my.tar.gz.
尝试
cat my.tar.gz.*gzip-l
返回

 compressed        uncompressed  ratio uncompressed_name
         -1                  -1   0.0% stdout
 compressed        uncompressed  ratio uncompressed_name
12000000000          3488460670 -244.0% my.tar
尝试
gzip-lmy.tar.gz.aa
返回

 compressed        uncompressed  ratio uncompressed_name
         -1                  -1   0.0% stdout
 compressed        uncompressed  ratio uncompressed_name
12000000000          3488460670 -244.0% my.tar
连接文件
cat my.tar.gz.*>my.tar.gz
会返回更糟糕的答案

  compressed        uncompressed  ratio uncompressed_name
103614559077          2375907328 -4261.1% my.tar

这是怎么回事?如何获得这些拆分tarball的实际压缩比?

gzip格式将未压缩的大小存储为流的最后四个字节
gzip-l
使用这四个字节和gzip文件的长度来计算压缩比。在这样做的过程中,gzip寻找输入的末尾以获得最后四个字节。请注意,四个字节最多只能表示4GB-1

在第一种情况下,您无法在管道输入上搜索,因此gzip放弃并报告-1

在第二种情况下,gzip将选取四个字节的压缩数据,实际上是四个随机字节,作为未压缩的大小,这必然小于12000000000,因此报告了负压缩比(扩展)

在第三种情况下,gzip得到的是实际的未压缩长度,但该长度模为232,必然远小于103 GB,报告的负压缩比更为显著

第二种情况是没有希望的,但是第一种和第三种情况的压缩比可以使用gzip的并行实现来确定,gzip使用多个核进行压缩
pigz-lt
在不存储输入的情况下对输入进行解压缩,以便直接确定未压缩的字节数。(
pigz-l
类似于
gzip-l
,也不起作用。您需要
t
进行测试,即解压缩而不保存。)