我有一个 tar.gz 文件,我想使用终端提取它。我使用了以下命令:tar tvzf ldtp_3.5.0.orig.tar.gz
和tar -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 结合-c
,gzip
管道将获取通过管道传输到它的标准输出流,gzip
并将其连接到 in 的标准输入tar
。