多个GZip文件的快速连接
我有gzip文件列表:
file1.gz file2.gz file3.gz
有没有办法连接或gzip这些文件到一个gzip文件, 而不必解压缩它们?
在实践中,我们将在一个networking数据库(CGI)中使用它。 Web将收到来自用户的查询,并根据查询列出所有文件,并将其以batch file的forms呈现给用户。
使用gzip文件,您可以简单地连接文件。 根据gzip RFC ,
gzip文件由一系列“成员”(压缩数据集)组成。 […]成员只是在文件中一个接一个地出现,没有额外的信息之前,之间或之后。
请注意,这与构build连接数据的单个gzip文件不完全相同; 除此之外,所有的原始文件名都被保存下来。 但是,gunzip似乎将其视为相当于一个级联。
由于现有工具通常忽略其他成员的文件名标题,因此从结果中提取单个文件是不容易的。 如果你想这是可能的,build立一个ZIP文件。 ZIP和GZIP都使用DEFLATEalgorithm来进行实际的压缩(ZIP支持一些其他压缩algorithm以及一个选项 – 方法8是对应于GZIP压缩的方法)。 区别在于元数据格式。 由于元数据是未压缩的,所以很简单,就可以去掉gzip头文件,并使用ZIP文件头和中央目录logging。 请参阅gzip格式规范和ZIP格式规范 。
这里是gzip的man页面所说的关于你的需求。
多个压缩文件可以连接在一起。 在这种情况下,gunzip将立即提取所有成员。 例如:
gzip -c file1 > foo.gz gzip -c file2 >> foo.gz Then gunzip -c foo is equivalent to cat file1 file2
不用说,file1可以被file1.gzreplace
你必须注意到这一点。 “gunzip将立即提取所有成员”。
所以为了让所有的成员个人,你将不得不使用额外的东西或写,如果你想这样做:)
但是,这也在手册页中解决。
“如果你想创build一个带有多个成员的归档文件,以便以后可以独立提取成员,可以使用诸如tar或zip之类的归档程序。GNU tar支持-z选项来透明地调用gzip。gzip被devise为焦油,不能作为替代品“。
HTH
您可以创build这些文件的tar文件,然后gzip tar文件来创build新的gzip文件
tar -cvf newcombined.tar file1.gz file2.gz file3.gz gzip newcombined.tar
只要使用猫。 它非常快(500 MB的0.2秒)
cat *gz > final mv final final.gz
然后你可以用zcat读取输出,以确保它是相当的:
zcat final.gz
我尝试了'gz -c'的另一个答案,但是当使用已经压缩的文件作为input时,我最终得到了垃圾(我想它是双重压缩它们的)。
PV:
更好的是,如果你有它,而不是猫:
pv *gz > final mv final final.gz
这会给你一个进度条,但是和猫一样。