多个 GZip 文件的快速连接
- 2024-10-29 08:35:00
- admin 原创
- 64
问题描述:
我有 gzip 文件列表:
file1.gz
file2.gz
file3.gz
有没有办法将这些文件连接或压缩为一个 gzip 文件,
而无需解压缩它们?
实际上,我们将在 Web 数据库 (CGI) 中使用它。Web 将接收来自用户的查询,并根据查询列出所有文件,然后将它们以批处理文件的形式呈现给用户。
解决方案 1:
使用 gzip 文件,您可以简单地将文件连接在一起,如下所示:
cat file1.gz file2.gz file3.gz > allfiles.gz
根据gzip RFC,
gzip 文件由一系列“成员”(压缩数据集)组成。[...] 成员只是一个接一个地出现在文件中,在它们之前、之间或之后没有任何附加信息。
请注意,这与构建单个 gzip 文件以合并数据并不完全相同;除此之外,所有原始文件名都会保留。但是,gunzip 似乎将其视为等同于合并。
由于现有工具通常会忽略其他成员的文件名标头,因此无法轻松地从结果中提取单个文件。如果您希望这成为可能,请改为构建 ZIP 文件。ZIP 和 GZIP 都使用 DEFLATE 算法进行实际压缩(ZIP 支持一些其他压缩算法以及一个选项 - 方法 8 是与 GZIP 压缩相对应的方法);区别在于元数据格式。由于元数据未压缩,因此可以简单地剥离 gzip 标头并添加 ZIP 文件标头和中央目录记录。请参阅gzip 格式规范和ZIP 格式规范。
解决方案 2:
以下是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 的补充,而不是替代。
解决方案 3:
只需使用 cat。它非常快(对我来说 500 MB 只需 0.2 秒)
cat *gz > final
mv final final.gz
然后你可以用 zcat 读取输出以确保它很漂亮:
zcat final.gz
我尝试了另一个答案“gz -c”,但是当使用已经 gzip 压缩的文件作为输入时,最终得到了垃圾(我猜它对它们进行了双重压缩)。
光伏:
更好的是,如果你有它,用'pv'代替cat:
pv *gz > final
mv final final.gz
这会给你一个进度条,但其功能与 cat 相同。
解决方案 4:
您可以创建这些文件的 tar 文件,然后对 tar 文件进行 gzip 压缩以创建新的 gzip 文件
tar -cvf newcombined.tar file1.gz file2.gz file3.gz
gzip newcombined.tar
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件