如何解压缩 filename.tar.gz 文件

131

我想要解压名为 filename.tar.gz 的归档文件。

使用 tar -xzvf filename.tar.gz 无法解压该文件,它会出现以下错误:

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error exit delayed from previous errors

10
file filename.tar.gz命令可以显示文件格式(如果已安装),如果是zip格式,可以尝试使用unzip命令或者安装一个通用的解压工具,比如unp - pce
1
错误意味着该文件不是gzip文件,尽管扩展名是这样的。尝试使用unzip filename.tar.gzgunzip filename.tar.gz命令并查看输出结果。 - Max Leske
1
@Max Leske 谢谢你的建议,但是当我尝试使用 gunzip filename.tar.gz 时,它会显示错误信息:不是gzip格式 - Kabir
1
@pce执行file filename.tar.gz命令会显示如下信息:POSIX tar归档文件。 - Kabir
1
这个问题应该发在alt.se.unix,而不是这里。 - Cole Tobin
显示剩余5条评论
9个回答

194
如果file filename.tar.gz命令显示如下信息:POSIX tar archive,那么这个归档文件是tar格式的,而不是GZip格式的。
如果不想解压缩gzipped(压缩)文件,可以不使用z选项来解压缩tar文件。
mv filename.tar.gz filename.tar # optional
tar xvf filename.tar

或者尝试使用类似于 unp 的通用解包工具(https://packages.qa.debian.org/u/unp.html),这是一种可以解压各种类型档案的脚本。

确定文件类型:

$ file ~/Downloads/filename.tbz2
/User/Name/Downloads/filename.tbz2: bzip2 compressed data, block size = 400k

7
感谢 @pce 的支持。你的答案是正确的。tar xvf filename.tar.gz。这对我起作用了。 - Kabir
tar xvf hadoop-2.7.2.tar tar:这不是一个“tar”类型的归档文件 tar:由于先前的错误而以失败代码停止 - EL missaoui habib

17
据我所知,该命令是正确的,假设您的输入文件是有效的 gzipped tar 文件。根据您的输出,它并不是。如果您是从互联网上下载的该文件,可能没有完整地下载该文件,请再试一次。
如果没有更多了解文件来源的信息,这里没有人能够给出确切的解决方案,只能提供有根据的猜测。

6
这让我重新审视我正在下载的文件。它来自apache,URL以.tar.gz结尾,所以我只是复制并粘贴了它。然而,那个链接不是用于tarball,而是用于列出tarball镜像的页面。所以我花了30分钟来尝试解压一个html页面。搞什么啊apache。 - eddiemoya
1
我曾经遇到过这个问题,请仔细检查你的文件是否是正确的大小,如果可能的话,也请使用校验和。 - kiwicomb123

7
我遇到了同样的错误。 命令的结果如下:
file hadoop-2.7.2.tar.gz

hadoop-2.7.2.tar.gz是HTML文件,ASCII文本格式。

该文件不是gzip格式的原因可能是下载或其他问题导致的。


你解决这个问题了吗?我这里也遇到了同样的问题。 - arilwan
如果您遇到此问题,请尝试在文本编辑器中打开文件。答案表明存在下载错误,因此他们得到了一个HTML错误页面而不是预期的gzip文件。下载程序(wget?)仍然将其保存为.gz扩展名。 - thelr

5

有时使用“wget”命令下载的文件会出现问题。就在10分钟前,我试图从命令屏幕向服务器安装一些东西,结果发生了同样的事情。解决方法是,我从网上将.tar.gz文件下载到我的计算机,然后通过FTP上传到服务器。之后,“tar”命令按预期工作。


2
看看wget日志,也许你被重定向了或者其他什么原因。 - chrismarx

2

在内部,tar xcvf <filename> 将调用路径环境变量中的 gzip 二进制文件来解压缩 tar 存档中的文件。有时第三方工具使用自定义的 gzip 二进制文件,这些文件与 tar 二进制文件不兼容。 因此,建议您通过运行 which gzip 命令检查您的 PATH 中的 gzip 二进制文件,并确保调用正确的 gzip 二进制文件。


0

你需要验证的另一种情况是,你尝试解压缩的文件不是空的并且是有效的。

在我的情况下,我没有正确地下载文件,在仔细检查后,确保我有正确的文件后,我可以轻松地解压缩它。


0

检查文件是否完整。如果您只下载了部分文件或存在重大问题,则可能会出现此错误消息。请检查MD5校验和。


0

tar.gz 是一个 gzip 文件内部的 tar 文件,因此首先您必须使用 gunzip -d filename.tar.gz 解压缩 gzip 文件,然后使用 tar 命令来解压缩它。但是,由于 gunzip 告诉您它不是 gzip 格式,您可以使用 file filename.tar.gz 命令查看它的格式,并使用适当的程序打开它。


0

所以,基本上看似是tar.gz文件的实际上并不是应有的格式。可以使用Linux命令file来确定这一点。例如,对于真正的.tgz文件,命令输出将如下所示:

root@f562353fc1ab:/app# file kafka_2.13-2.8.0.tgz 
kafka_2.13-2.8.0.tgz: gzip compressed data, from FAT filesystem (MS-DOS, OS/2, NT), original size modulo 2^32 75202560

所以,你收到文件的来源没有按正确格式发送。如果你从URI下载了所谓的.tgz文件,可能URI是错误的。在我的情况下,当我提取kafka二进制文件(.tgz文件)时遇到了同样的问题。结果发现,wget的URI是不正确的。至少对于kafka来说,要获取正确的下载链接,从下载页面(https://kafka.apache.org/downloads.html),我们必须遍历到代表二进制文件的链接所突出显示的页面。一旦我们进入那个页面,我们就会得到下载二进制文件的确切链接。此外,在下载过程中,wget会显示将要下载的文件类型。它会打印类似于这样的内容来指示类型。

Length: unspecified [text/html] --> URI不正确。

Length: 71403603 (68M) [application/octet-stream] --> URI正确。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接