Answers:
柏油
压缩
zip分别压缩文件的事实会影响压缩率,尤其是在许多小的相似文件上。
(至少这在十年前是完全正确的。)
Tar比Zip保留的元数据要多得多,请参阅我的比较(有些过时):
(点击放大)
Tar通过了65%的测试,而Zip仅通过了17%。我已根据BSD许可在github上提供了该测试套件,因此如果您使用Mac,则可以自己尝试。对于linux,我不确定是否有任何元数据,因此这些测试可能不相关。
效率可以通过不同的方式进行衡量:
还有其他问题,例如“操纵结果归档文件的工具有多普遍?”
因此,例如,bzip2
创建的文件比的文件小gzip
,但可能需要更长的时间。而且,以我的经验,gzip
它在类似Unix的系统上是通用的,但bzip2
仍然不是(尽管它很常见,通常很容易获得)。
正如Wim指出的那样,tar本身不会压缩。如果您确实添加了压缩tar(例如,获取.tar.gz或.tar.bz2),则您要一次压缩整个tar文件。相反,zip会分别压缩每个文件。
效率取决于工作量。特别是,zip允许您直接访问单个文件。使用tar,您必须先搜索不想要的(压缩)文件。压缩性能取决于您要压缩的内容。 tar
与bzip2
往往是大量的类似文件(如源目录)更好。 zip
如果每个文件具有非常不同的内容,可能会更好。
Zip归档文件的末尾包含一个中心目录(最可能避免避免事先创建目录,而您尚不知道其中的内容)。这样可以快速提取单个文件,而无需解压缩整个存档:只需读取存档目录并仅提取需要的文件即可。但是,这要求整个存档都可访问,并且需要随机访问,而随机访问仅在块设备(软盘,硬盘驱动器)上可用。此外,归档目录很容易:如果档案被截断由于某种原因,它需要大量魔法提取任何从归档有用。
Zip存档是为BBS使用而创建的,在该存档中,必须将目录的内容捆绑到一个(压缩的)文件中,而不必下载可能成千上万的单个文件,这一点很重要。出于同样的原因,即使是今天,大多数网站都将其下载捆绑在一起。
Tar归档文件被设计用于捆绑备份,以用于磁带驱动器,从而实现顺序访问。没有中央目录;相反,归档文件以固定的间隔包含标题块,这些标题块指示接下来的几个块中将跟随哪些文件。打算一口气阅读Tar档案;如果仅要提取单个文件,则从头开始直到找到所请求的文件(也可能在最后)顺序读取存档。压缩是最重要的;每个应用到tar归档的各种压缩方案的(compress
,gzip
,bzip2
等)是流压缩器,无论如何都不会改变档案的顺序性质。在最坏的情况下,在开始提取之前,您将需要更多的块。
这听起来可能是微不足道的差异,但实际上代表了哲学上的两极对立。使用zip归档文件,总是需要手头的整个文件才能执行有用的操作,而tar归档文件可以流式传输到管道中。我可以下载一个大型的tar存档,并从头几块开始就从一开始就将其解压缩(并且可能在获得所需文件后立即中断下载)。对于Zip存档,我必须等到存档目录出现,该目录位于存档的末尾。但是,一旦我做手头的整个文件,从中提取部分内容将是一个tar文件快得多。
两种格式都有一个很强的优势,这取决于它们的使用位置和使用方式。由于管道(以及从一个进程到另一个进程的流数据概念)仅真正存在于Unix世界中,因此tar归档文件的主要优势在其他系统上丢失了,这就是为什么Zip归档文件在那里更受欢迎的原因。但是tar存档更加灵活,这就是为什么我在有选择的情况下更喜欢它们。