The*_*ner 37 linux compression unix tar archiving
我有一个 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
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)
将c
在gzip
还有-
在命令的末尾的关键在于:
c
选项gzip
将告诉gzip
解压缩到标准输出流。-
在所述的端部tar
命令的意思是“使用标准输入。” 因此,与-c
in相结合gzip
,管道将接收通过管道传输到它的标准输出流,gzip
并将其连接到 in 的标准输入tar
。