先说答案,并不一定。绝大多数场景里,你完全可以直接把几个
.gz
文件用cat
拼在一起,生成一个合法的 multi-member gzip 流,gunzip 等工具解压时会自动把它们当成一个整体顺序解出;既省时间,也省硬盘 I/O。
首先,让我们知道什么叫 multi-member。 在 RFC 1952 的定义里,一个 gzip 文件其实可以由若干个完整的 “member” 串联而成。每个 member 自带头、数据块和尾 CRC,因此把多个 member 直接按字节级拼接也依旧合法——解析器读完第一个尾部后,继续顺着流读下去就是下一段数据([rfc-editor.org][1])。
# demo
echo alpha | gzip > a.gz # member 1
echo beta | gzip > b.gz # member 2
cat a.gz b.gz > ab_multi.gz # 合并
gunzip -c ab_multi.gz # 输出 alpha 和 beta
知道这个知识点后,当你有一个样本,加测好多次的时候后,就不需要用下面的操作
pigz -dc part1.gz part2.gz part3.gz | pigz > all.gz
而是直接用cat合并
cat part1.gz part2.gz part3.gz > all.gz
后续用gzip或者pigz都是可以顺利解压缩的。