为什么 tar 无法解压 .zip 文件?

为什么 tar 无法解压 .zip 文件?

我尝试了大多数格式(gzip 等)来使用 来提取 zip 文件tar,当我对 Google 感到沮丧时,我发现没有办法使用 来提取 zip 文件,tar只有建议使用zipunzip。事实上,我的 Linux 系统甚至没有一个zip实用程序,但只有一个unzip(让我想知道为什么这是主要推荐的选项)。当然unzip有效,解决了我的问题,但为什么无法tar提取 zip 文件?也许我应该问, zip 和 所支持的压缩方法有什么区别tar

答案1

UNIX 的哲学是拥有小工具。一个工具只做一件事,而且做得特别好。

tar工具只是将多个文件合并为一个文件,而不进行任何压缩。

gzip工具仅压缩单个文件。

如果您想同时拥有这两个工具,只需将这两个工具组合起来即可生成一个.tar.gz文件。


zip工具是完全不同的东西。它需要一堆文件并将它们组合成一个压缩文件。使用完全不同的算法。


如果您想要一种工具来统治它们,请使用atool.它将支持一个一大堆只需检测格式并调用正确的工具即可识别不同的格式。

答案2

长话短说:tar GNU 工具不会通过 zip/unzip 进行管道传输,因为没人关心。

长篇故事,原始尺寸:

tar最初并不是为了解压缩和压缩文件,而是为了将多个文件归档到一个大文件中。由于人们不仅想要归档他们的文件,而且还想要压缩它们,所以他们只是tar通过任何接受数据流输入并将结果放入文件的压缩器来传输输出。利润!

现在,为了使此类任务尽可能轻松,tar决定在内部将生成的文件通过管道传输到压缩工具,例如 gzip、lzma 等,这些工具在运行时由每种格式的特殊标志激活tar。这就是为什么当您尝试通过您提取损坏的文件时,tar会显示底层工具错误,而不是tar

$ tar zxf damaged.tar.gz
gzip: damaged.tar.gz: unexpected end of file

所以,并不是说tar不能解压缩 zip 文件,只是tar没有能力通过正确的工具来传输它,因为没有人真正费心去实现它,而 zip 已经完成了 tar 文件的文件归档功能格式 tar 没有理由支持它。

现在,有一体化工具可以压缩/解压缩您扔给它们的所有内容,同样,您需要拥有正确的工具来真正支持它。如果没有它们,该工具就会失败。

答案3

文件tar本身就是一种专为磁带归档而设计的文件格式。然后可以使用(例如)gzipbzip2压缩格式来压缩该格式。当您提取压缩的 tar 文件时,实际上是将其解压缩,然后从未压缩的tar文件中提取原始文件。

当您提取zip文件时,其中没有tar文件,只有所有原始文件。因此根本没有理由tar参与这个过程。

您还可以使用gzipbzip2本身来压缩文件,就像您可以创建zip文件一样(不tar涉及)。当您解压缩这些文件时,您使用gunziporbunzip2而不是tar

答案4

由于“有些事情就是这样,我们应该接受它们”的答案也不适合我,所以我只是做了一些挖掘(学习新东西总是好的不是吗?)。

所以看起来问题在于这些工具的去向和目的是什么。

不要解释我的发现并让水域变得不必要的浑浊(混淆让我生气),看看这篇文章: http://www.difference Between.net/technology/difference- Between-zip-and-gzip/

我认为 tar 可以内置 zip 支持,但方法显然有根本的不同。或者他们可能认为为什么有人会使用这个归档工具来管理来自另一个归档和压缩工具的文件(或者两个原始编码员之间可能存在一些争论,并且提交了一项限制令,禁止 zip 跨越应用程序边界。是的,我在开玩笑)。

相关内容