为什么不能 tar 解压 .zip 文件?

Plu*_*uto 41 tar zip

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

mic*_*has 43

UNIX 哲学是拥有小工具。一个工具只做一件事,但这特别好。

tar工具只是将几个文件组合成一个文件,没有任何压缩。

gzip工具只是压缩单个文件。

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


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


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

  • 稍微挑剔一下,“gzip”压缩算法与“zip”使用的算法相同。区别在于,“gzip”旨在压缩任何字节流,包括“.tar”文件,而“zip”是受 PKZIP 派生和启发的,一步(并按该顺序)压缩和存档。 (2认同)

Bra*_*iam 16

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

长话短说,原尺寸:

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

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

$ tar zxf damaged.tar.gz
gzip: damaged.tar.gz: unexpected end of file
Run Code Online (Sandbox Code Playgroud)

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

现在,有多合一的工具可以压缩/解压缩你扔给它们的所有东西,同样,你需要有正确的工具来实际支持它。如果您没有它们,该工具将失败。

  • 好吧,除了没有人实现正确的工具来进行管道传输之外,没有一个:tar 文件*仅*将多个文件合并为一个。压缩是分开的。因此,过滤器 tar 管道仅通过压缩/解压缩单个 tar 文件。Zip 的工作方式不同;它使用一个集成工具来压缩和组合(类似的 Unix 程序是 `afio`)。 (2认同)