如何在不解压的情况下将 gz 文件合并为 tar.gz?
Posted
技术标签:
【中文标题】如何在不解压的情况下将 gz 文件合并为 tar.gz?【英文标题】:how to merge gz files into a tar.gz without decompression? 【发布时间】:2012-12-15 13:13:21 【问题描述】:我有一个只使用未压缩文件的程序。我有几个 .gz 文件,我的目标是将它们的串联提供给该程序。如果我有一个 tar.gz 文件,我可以使用 archivemont 命令挂载 tar.gz 存档。
我知道我可以连接 gz 文件:
cat a.gz b.gz > c.gz
但据我所知,没有办法挂载 gz 文件。我没有足够的磁盘空间来解压缩所有文件,并且 tar 命令不接受 stdin 作为输入,所以我不能这样做:
zcat *.gz | tar - | gzip > file.tar.gz
【问题讨论】:
【参考方案1】:不清楚您需要对 tar.gz 存档执行哪些操作。但据我所知,tar.gz 不是这个应用程序的格式。整个存档流由 gzip 压缩,因此您无法拉出或更改文件,而无需重新压缩之后的所有内容。可以专门准备 tar.gz 流以保持每个文件的压缩独立,但您也可以使用 .zip 格式,它更适合随机访问和操作存档中的单个文件。
为了解决您的 cmets 问题,tar 实际上可以接受 stdin 作为输入。请参阅pipe tar extract into tar create 获取一些示例,其中 GNU tar 和 BSD tar(使用不同的语法)都可以从标准输入获取 tar 文件、删除条目并将新的 tar 文件写入标准输出。
【讨论】:
以上是关于如何在不解压的情况下将 gz 文件合并为 tar.gz?的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL 中,如何在不使用大小写的情况下将两个查询合并为一个?
如何在不使用 pip install 的情况下从 tar.gz 文件安装 Python 包
在不使用 S3 存储桶的情况下将数据从远程服务器的 .gz 文件加载到 redshift 的 postgresql 实例?