哪个更有效-tar或zip压缩?tar和zip有什么区别?


68

我在Linux环境中工作,想了解tar和zip命令。

哪个更有效-tar还是zip?我还需要知道tar和zip命令之间的区别。谁能向我解释?

Answers:


77

tar只能从多个文件中制作一个文件,除非组合了诸如gzipbzip2(可以分别tar使用-z-j选项从内部调用)压缩程序,否则它不会进行压缩。zip在一个程序中结合了归档和压缩功能。


60

柏油

  • 假设您将从一端到另一端阅读-“ Tape ARchive”。(命令的年龄显示...)
  • 不执行压缩,但是您可以通过将其通过gzip和bzip2进行管道传输来压缩整个结果流(在内部使用-z或-j完成)
  • 存储unix文件属性:uid,gid,权限(最明显的是可执行文件)。默认值可能取决于您的分发,并且可以使用选项进行切换。

压缩

  • 存储MSDOS属性。(存档,只读,隐藏,系统)
  • 压缩每个文件,然后将它们添加到存档中
  • 在文件末尾包含文件表
  • 由于前两者的结果,允许仅读取有关所需文件的确切部分。

zip分别压缩文件的事实会影响压缩率,尤其是在许多小的相似文件上。

(至少这在十年前是完全正确的。)


22

Tar比Zip保留的元数据要多得多,请参阅我的比较(有些过时):

在此处输入图片说明

(点击放大)

Tar通过了65%的测试,而Zip仅通过了17%。我已根据BSD许可在github上提供了该测试套件因此如果您使用Mac,则可以自己尝试。对于linux,我不确定是否有任何元数据,因此这些测试可能不相关。


有趣!为此+1。但是话又说回来,那是一个很大的程序。您是否出于其他目的编写了此文档?只是好奇。
CppLearner 2013年

我为几年前从事的文件管理器编写了测试。虽然从未发布过。
neoneye 2013年

1
Linux也具有元数据,因此应该为它工作。
zeitue '16

14

效率可以通过不同的方式进行衡量:

  1. 该过程需要多长时间?
  2. 生成的文件有多大?

还有其他问题,例如“操纵结果归档文件的工具有多普遍?”

因此,例如,bzip2创建的文件比的文件小gzip,但可能需要更长的时间。而且,以我的经验,gzip它在类似Unix的系统上是通用的,但bzip2仍然不是(尽管它很常见,通常很容易获得)。


3
7zip(7-zip.org)是另一个不错的选择,可以以节省CPU时间为代价获得出色的压缩效果。比bzip2少见(我不知道默认情况下不会默认安装它),但易于在大多数地方安装(大多数Linux发行版都在标准存储库中,并且有一个适用于Windows的简单安装程序包。像tar + gzip一样,它带有跨输入文件的压缩窗口,因此在包含许多小文件时,比zip节省更多的成本
David Spillett 2010年

3
效率还可以通过保存数据的程度来衡量,请参阅我对这个问题的回答。在保留数据方面,Tar比zip好得多。
neoneye

1
另一个度量标准是UNIX外部的兼容性。Windows可以使用zip(内置于Windows)很好,通常可以使用共享软件轻松处理tar.gz,但是很少找到bzip2。不幸的是,原始问题没有提到这些标准,因此看不到它们是否相关。
Rich Homolka 2010年

1
我曾经对一些常见压缩机所需的压缩率与时间进行了详尽的回顾,而这将是最有效的,具体取决于您对空间与时间的重视程度
Wim

9

正如Wim指出的那样,tar本身不会压缩。如果您确实添加了压缩tar(例如,获取.tar.gz或.tar.bz2),则您要一次压缩整个tar文件。相反,zip会分别压缩每个文件。

效率取决于工作量。特别是,zip允许您直接访问单个文件。使用tar,您必须先搜索不想要的(压缩)文件。压缩性能取决于您要压缩的内容。 tarbzip2往往是大量的类似文件(如源目录)更好。 zip如果每个文件具有非常不同的内容,可能会更好。


4
...另一方面,您必须先获取整个zip文件,然后才能访问内容,因为toc位于末尾。相比之下,您可以在字节到达时尽快解压缩tar…
akira 2010年

6

Zip归档文件的末尾包含一个中心目录(最可能避免避免事先创建目录,而您尚不知道其中的内容)。这样可以快速提取单个文件,而无需解压缩整个存档:只需读取存档目录并仅提取需要的文件即可。但是,这要求整个存档都可访问,并且需要随机访问,而随机访问仅在块设备(软盘,硬盘驱动器)上可用。此外,归档目录很容易:如果档案被截断由于某种原因,它需要大量魔法提取任何从归档有用。

Zip存档是为BBS使用而创建的,在该存档中,必须将目录的内容捆绑到一个(压缩的)文件中,而不必下载可能成千上万的单个文件,这一点很重要。出于同样的原因,即使是今天,大多数网站都将其下载捆绑在一起。

Tar归档文件被设计用于捆绑备份,以用于磁带驱动器,从而实现顺序访问。没有中央目录;相反,归档文件以固定的间隔包含标题块,这些标题块指示接下来的几个块中将跟随哪些文件。打算一口气阅读Tar档案;如果仅要提取单个文件,则从头开始直到找到所请求的文件(也可能在最后)顺序读取存档。压缩是最重要的;每个应用到tar归档的各种压缩方案的(compressgzipbzip2等)是流压缩器,无论如何都不会改变档案的顺序性质。在最坏的情况下,在开始提取之前,您将需要更多的块。

这听起来可能是微不足道的差异,但实际上代表了哲学上的两极对立。使用zip归档文件,总是需要手头的整个文件才能执行有用的操作,而tar归档文件可以流式传输到管道中。我可以下载一个大型的tar存档,并从头几块开始就从一开始就将其解压缩(并且可能在获得所需文件后立即中断下载)。对于Zip存档,我必须等到存档目录出现,该目录位于存档的末尾。但是,一旦我手头的整个文件,从中提取部分内容将是一个tar文件快得多。

两种格式都有一个很强的优势,这取决于它们的使用位置和使用方式。由于管道(以及从一个进程到另一个进程的流数据概念)仅真正存在于Unix世界中,因此tar归档文件的主要优势在其他系统上丢失了,这就是为什么Zip归档文件在那里更受欢迎的原因。但是tar存档更加灵活,这就是为什么我在有选择的情况下更喜欢它们。


5

正如其他人已经说过的那样,tar创建了所有文件的大“块”,这些文件可以使用gzip或bzip2之类的流命令压缩。

这样做的缺点是您必须解压缩整个文件才能访问存档中的一个文件。

这样做的好处是压缩率通常更高,尤其是当压缩文件非常相似时。

其他打包程序(如“ rar”)具有“块模式”(或类似模式)以具有相同的效果。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.