【问题标题】:combine multiple gzip compressed files in a tar file将多个 gzip 压缩文件合并到一个 tar 文件中
【发布时间】:2015-04-30 19:01:29
【问题描述】:

我有一个非常大的 tar 文件,其中包含许多 gzip 文件。我想将所有 gzip 文件合并到一个 gzip 文件中并放在另一个目录中。要查看我使用的 tar 文件的内容:

tar -zxvf Big.tar

给出:

Big/FileA.gz
Big/FileB.gz
Big/FileC.gz
Big/FileD.gz

要正常合并多个 gzip 文件,我会移动到该目录并使用:

cat FileA.gz FileB.gz FileC.gz FileD.gz > BigFile.gz

但是 BigFile.gz 将保留在该目录中。我只是不确定如何在 tar 文件中执行此操作以及如何将组合文件写入另一个目录。

【问题讨论】:

  • 输出文件的去向完全取决于您放在> 右侧的内容。使用裸文件名,它使用当前目录。使用完整或相对路径,它会去那里。不过,我不明白有关 tar 文件的其余问题。您是在问如何获取 tarball 中的文件并从中制作一个位 concat-ed gzip 文件?
  • @EtanReisner 出于某种原因,当我在“>”之后使用完整路径时,它仍然将文件放在与文件最初所在的目录相同的目录中。我想这不是我的问题中最重要的部分,因为我以后总是可以移动它。基本上我想知道如何连接压缩包中的文件(最好将连接的 gzip 文件写在压缩包之外)
  • 这是不可能的。如果您在> 之后放置一个完整(er)路径,它将使用该完整(er)路径。它不能使用其他任何东西。

标签: bash shell unix gzip cat


【解决方案1】:

使用 GNU tar,您可以:

tar -Oxf Big.tar --wildcards 'Big/*.gz' > /tmp/your_file.gz

使用 OS X tar,您必须单独列出文件:

tar -Oxf Big.tar Big/FileA.gz Big/FileB.gz > /tmp/your_file.gz

两者的显着特点是-O,它将文件写入标准输出。

这是一个 GNU 系统上的示例脚本:

$ pwd
/home/me

$ tar tf Big.tar
Big/
Big/foo.txt.gz
Big/bar.txt.gz

$ tar -Oxf Big.tar --wildcards 'Big/*.gz' > /tmp/your_file.gz

$ zcat /tmp/your_file.gz
This is the contents of foo.txt
This is the contents of bar.txt

【讨论】:

  • 我收到一条错误消息:“tar: Option --wildcards is not supported”
  • @user2165857 我猜你的意思是“我没有 GNU tar。我使用的是 OS X 版本”,并进行了相应更新
  • 这里需要--wildcards吗?不是--excludes吗? glob 对文件选择本身无效吗?
  • @EtanReisner 在我的系统上是必需的
  • 这很有趣。我不认为它应该是(它不在我大部分工作的 CentOS 5 机器上)。我想知道这是否改变了。你用的是什么版本的 tar? tar --show-defaults 说什么?
【解决方案2】:

使用 tar 并假设文件夹 Big 有 FileA.gz、FileB.gz 等:

tar -czv -f /path/to/final/BigFile.gz -C Big .

【讨论】:

  • 这里的问题是如何从 tarball 的内容创建单个 gzip 文件,而不是如何从一组 gzip 文件创建 tarball。
  • 好的 - 我只是赞成其他人的回答。我喜欢使用 -O 和 -x
猜你喜欢
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 2022-01-23
  • 2020-01-24
  • 1970-01-01
  • 2010-09-21
相关资源
最近更新 更多