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

rek*_*sri 75 linux unix zip tar

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

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

Wim*_*Wim 87

tar只从多个文件中生成一个文件,除非组合压缩程序,例如gzipor bzip2(您可以分别tar使用-zor-j选项从内部调用),否则它不会进行压缩。zip在一个程序中结合了存档和压缩。


MaH*_*uJa 62

柏油

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

压缩

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

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

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

  • ZIP 存储 MS-DOS 属性*和* Unix 属性:Unix `zip` 和 `unzip` 实用程序*总是*存储和恢复 Unix 文件权限,`unzip` 恢复 Unix 文件时间戳,除非您提供 `-DD` 选项,如果您提供“-X”选项,“unzip”甚至可以恢复 UID 和 GID。 (2认同)

neo*_*eye 23

Tar 比 Zip 保留了更多的元数据,请参阅我的比较(有点过时):

在此处输入图片说明

(点击放大)

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


Tel*_*hus 14

效率可以用不同的方式衡量:

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

还有其他问题,例如“操作生成的档案的工具有多常见?”

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

  • 7zip (http://www.7-zip.org/) 是另一种以牺牲 CPU 时间为代价获得出色压缩的不错选择。比 bzip2 少见(我知道的任何地方都没有默认安装),但在大多数地方都易于安装(它在大多数 Linux 发行版的标准存储库中,并且有一个适用于 Windows 的简单安装程序包。像 tar+gzip 一样,它带有跨输入文件的压缩窗口,因此在包含许多小文件时比 zip 节省更多。 (3认同)
  • 效率也可以通过它保存数据的程度来衡量,请参阅我对这个问题的回答。在保存数据方面,Tar 比 zip 好得多。 (3认同)

Mat*_*hen 9

正如 Wim 所指出的,tar 本身不会压缩。如果您确实添加了 tar 压缩(例如获得 .tar.gz 或 .tar.bz2),您将一次压缩整个 tar 文件。相比之下,zip 单独压缩每个文件。

效率取决于工作量。具体来说,zip 允许您直接访问单个文件。使用 tar,您必须先查找不需要的(压缩的)文件。压缩性能取决于您要压缩的内容。 对于大量类似的文件(例如源目录),tarwithbzip2通常更好。 zip如果每个文件的内容非常不同,可能会更好。

  • ...另一方面,您必须先获取整个 zip 文件,然后才能访问内容,因为 toc 位于末尾。相反,您可以在字节到达时尽快解压缩 tar... (4认同)

Vuc*_*rul 6

Zip 档案在末尾包含其内容的中央目录(最有可能避免必须事先创建目录,您还不知道里面有什么)。这允许快速提取单个文件而无需解压缩整个存档:只需读取存档目录并仅提取需要的内容。但是,这要求整个存档都可以访问,并且需要仅在块设备(软盘、硬盘驱动器)上可用的随机访问。此外,存档目录容易受到攻击:如果存档因某种原因被截断,则需要大量的魔法才能从存档中提取任何有用的东西

Zip 档案是为 BBS 使用而创建的,在这种情况下,能够将目录的内容捆绑到一个(和压缩的)文件中非常重要——而不必下载可能数以千计的单个文件。就像大多数网站即使在今天也捆绑下载,出于同样的原因。

tar 档案被设计用于捆绑用于磁带驱动器的备份,因此用于顺序访问。没有中央目录;相反,存档包含定期间隔的标题块,指示接下来的几个块中将遵循哪些文件。焦油档案旨在一举阅读;如果只提取一个文件,则按顺序读取存档,从最开始直到找到请求的文件(也可能在最后)。在此之上应用压缩;应用于 tar 档案的各种压缩程序中的每一个 ( compress, gzip,bzip2等)是流压缩器,在任何情况下都不会改变存档的顺序性质。在最坏的情况下,在开始提取之前,您需要更多的块。

这听起来像是微不足道的差异,但实际上代表了哲学上的对立面。使用 zip 档案时,总是需要手头有整个文件来做任何有用的事情,而 tar 档案可以流式传输到管道。我可以下载一个大的 tar 存档并从头开始提取它,只要前几个块进来(并且可能在我得到我正在寻找的文件后立即中断下载)。对于 Zip 存档,我必须等到存档目录出现,它出现在存档的最后。但是一旦我手头有了整个文件,从 tar 文件中提取部分内容就会快得多。

这两种格式都有一个非常适合它们的优点,具体取决于它们的使用地点和方式。由于管道(以及从一个进程到另一个进程的流数据的概念)只存在于 Unix 世界中,tar 存档的主要优势在其他系统上丢失,这就是 Zip 存档在那里更受欢迎的原因。但是 tar 档案更灵活,这就是为什么我在有选择的时候更喜欢它们。


Ian*_*anH 5

正如另一个已经说过的,tar 为所有可以使用流压缩器(如 gzip 或 bzip2)压缩的所有文件创建一个大“块”。

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

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

其他像“rar”这样的打包程序有一个“块模式”(或类似的)来达到同样的效果。