多个gz文件一定要先分别解压缩再合并才能压缩吗?

先说答案,并不一定。绝大多数场景里,你完全可以直接把几个 .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都是可以顺利解压缩的。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×