我有gzip文件列表:
file1.gz
file2.gz
file3.gz
有没有办法将这些文件连接或压缩到一个gzip文件中 无需解压缩吗?
在实践中,我们将在Web数据库(CGI)中使用它。网络将收到的地方 来自用户的查询,并根据查询列出所有文件并显示它们 在批处理文件中返回给用户。
答案 0 :(得分:84)
使用gzip文件,您可以简单地将文件连接在一起。根据{{3}},
gzip文件由一系列“成员”(压缩数据集)组成。 [...]成员只是在文件中一个接一个地出现,在它们之前,之间或之后没有其他信息。
请注意,这与构建连接数据的单个gzip文件不完全相同;除其他外,保留所有原始文件名。然而,gunzip似乎把它当作串联来处理它。
由于现有工具通常忽略其他成员的文件头,因此不容易从结果中提取单个文件。如果您希望这样做,请改为构建ZIP文件。 ZIP和GZIP都使用DEFLATE算法进行实际压缩(ZIP支持一些其他压缩算法以及一个选项 - 方法8是与GZIP压缩相对应的方法);不同之处在于元数据格式。由于元数据是未压缩的,因此它很容易剥离gzip标头并改为使用ZIP文件头和中央目录记录。请参阅gzip RFC和gzip format specification。
答案 1 :(得分:46)
以下man 1 gzip
说明了您的要求。
可以连接多个压缩文件。在这种情况下,gunzip将立即提取所有成员。例如:
gzip -c file1 > foo.gz gzip -c file2 >> foo.gz
然后
gunzip -c foo
相当于
cat file1 file2
毋庸置疑,file1
可以替换为file1.gz
。
你必须注意到这一点:
gunzip将立即提取所有成员
因此,为了让所有成员单独参与,如果你愿意,你将不得不使用额外的东西或写作。
但是,这也可以在手册页中找到。
如果您希望创建一个包含多个成员的归档文件,以便以后可以独立提取成员,请使用tar或zip等归档文件。 GNU tar支持
-z
选项以透明地调用gzip。 gzip被设计为tar的补充,而不是替代品。
答案 2 :(得分:11)
您可以创建这些文件的tar文件,然后gzip tar文件以创建新的gzip文件
tar -cvf newcombined.tar file1.gz file2.gz file3.gz
gzip newcombined.tar
答案 3 :(得分:10)
只需使用猫。速度非常快(对于500 MB,我只需0.2秒)
cat *gz > final
mv final final.gz
然后,您可以使用zcat读取输出以确保它非常漂亮:
zcat final.gz
我尝试了另一个回答' gz -c'但是当我使用已经gzip压缩的文件作为输入时,我最终得到了垃圾(我猜它是双重压缩它们)。
<强> PV:强>
更好的是,如果你拥有它,&#39; pv&#39;而不是猫:
pv *gz > final
mv final final.gz
这会为您提供一个进度条,但它与cat相同。