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

The*_*ner 37 linux compression unix tar archiving

我有一个 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
Run Code Online (Sandbox Code Playgroud)

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

$ file ldtp_3.5.0.orig.tar.gz 
ldtp_3.5.0.orig.tar.gz: gzip compressed data, from Unix
Run Code Online (Sandbox Code Playgroud)

我可以使用右键单击 --> 提取来提取它,但我想使用终端来提取它。谁能告诉我怎么做?

Gia*_*968 49

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

意思是,如果您从 Web 服务器下载此文件,有时会在服务器级别将 Gzip 压缩应用于 Web 内容以加快内容下载。但是,如果服务器上没有正确设置以忽略诸如此类的已压缩内容,则可能会无意中对 Gzip 文件进行双重处理。

考虑到这一点,我会看看是否简单地从命令行取消 Gzip 以查看会发生什么。使用这样的命令:

gzip -d ldtp_3.5.0.orig.tar.gz
Run Code Online (Sandbox Code Playgroud)

并查看生成的文件是什么。运行该命令后,我有一种有趣的感觉,您将不会ldtp_3.5.0.orig.tar在目录中看到一个,而是一个名为源的文件ldtp_3.5.0.orig.tar.gz--但也许修改更改了?如果是这种情况,它确实是双 Gzip 压缩的。所以此时——在最初的 un-Gzip 之后——你可以tar像这样运行你的命令:

tar -xvzf ldtp_3.5.0.orig.tar.gz
Run Code Online (Sandbox Code Playgroud)

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

另一种类似于两步过程的方法是将 to 的输出通过管道gzip传输tar如下:

gzip -dc ldtp_3.5.0.orig.tar.gz | tar -xvzf -
Run Code Online (Sandbox Code Playgroud)

cgzip还有-在命令的末尾的关键在于:

  • c选项gzip将告诉gzip解压缩到标准输出流。
  • 所述-在所述的端部tar命令的意思是“使用标准输入。” 因此,与-cin相结合gzip,管道将接收通过管道传输到它的标准输出流,gzip并将其连接到 in 的标准输入tar