提取 tar.gz 文件会返回“这看起来不像 tar 存档。”

提取 tar.gz 文件会返回“这看起来不像 tar 存档。”

我有一个 tar.gz 文件,我想使用终端提取它。我使用了以下命令:tar tvzf ldtp_3.5.0.orig.tar.gztar -xvzf ldtp_3.5.0.orig.tar.gz。但是,我对这两个文件得到了相同的结果:

tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors

文件命令的输出显示它是一个 gzip 文件:

$ file ldtp_3.5.0.orig.tar.gz 
ldtp_3.5.0.orig.tar.gz: gzip compressed data, from Unix

我可以使用右键单击 --> 提取来提取它,但我想使用终端来执行此操作。有人能告诉我怎么做吗?

答案1

查看您看到的错误,再加上您确实可以解压缩的事实,这表明该文件是一个真正的 TAR/Gzip 档案,但可能不是在 Gzip 之后立即创建的 TAR。

也就是说,如果您从 Web 服务器下载此文件,有时会在服务器级别对 Web 内容应用 Gzip 压缩以加快内容下载速度。但如果未在服务器上正确设置以忽略已压缩的内容(如此内容),则可能会无意中对文件进行双重 Gzip 压缩。

考虑到这一点,我会看看是否只需从命令行取消 Gzip 即可查看会发生什么。使用如下命令:

gzip -d ldtp_3.5.0.orig.tar.gz

然后看看生成的文件是什么。我有一种奇怪的感觉,运行该命令后,你不会ldtp_3.5.0.orig.tar在目录中看到一个,而是看到一个与源文件同名的文件ldtp_3.5.0.orig.tar.gz——但也许修改了?如果是这样的话,它确实是双重 Gzip 压缩的。因此,此时——在初始解压 Gzip 之后——你可以tar像这样运行命令:

tar -xvzf ldtp_3.5.0.orig.tar.gz

现在它应该可以正确解压缩完整的 TAR 档案。

执行与这两步过程类似的另一种方法是将输出通过管道传输到,gzip如下tar所示:

gzip -dc ldtp_3.5.0.orig.tar.gz | tar -xvzf -

c命令中的以及gzip末尾的-是关键:

  • c选项gzip将告诉gzip解压缩到标准输出流。
  • 命令末尾-tar表示“使用标准输入”。因此,与 in 结合-cgzip管道将获取通过管道传输到它的标准输出流,gzip并将其连接到 in 的标准输入tar

相关内容