跳到正文

如何选择压缩包格式

四种格式,三种真正不同的设计,还有一种任何免费软件都不被允许生成。选哪种,几乎完全取决于由谁来打开。

最后审阅:

简短回答

发给别人:用ZIP。 本世纪生产的每一台Windows、macOS和Linux电脑,无需安装任何软件都能打开它。这一点比任何压缩率优势都更有价值,而且只有这一种格式做得到。

在Unix上备份或迁移目录树:用tar.gz。 它会记录权限、所有者和符号链接,常用格式中只有它能妥善做到这一点,而且压缩率比ZIP更高。

想压到尽可能小:用7z。 对大多数内容,它都比ZIP小得多,并支持AES-256加密,连文件名都能和内容一起隐藏。对方需要安装软件——软件免费,但终究多了一步。

RAR:您几乎肯定用不着,就算真的需要,也只有WinRAR能生成。下文会详细解释,因为这是大家最常带着来的问题。

为什么tar.gz比ZIP压得更小

差别在于结构,而不在于压缩算法更好。ZIP会单独压缩每一个文件,正因如此,解压软件才能从一个大压缩包里只取出一项,而不必动其他内容。.tar.gz则把所有内容当作一个连续的数据流来压缩——tar先把文件首尾相接,再由gzip把整个结果包起来。

这意味着压缩后的tar可以利用文件之间的重复内容,而ZIP做不到。对于一个装着五十份相似源代码、配置文档或日志文件的文件夹,差别相当明显;而对于一个装着互不相关照片的文件夹,则毫无差别,因为谁都无法再压缩已经压缩过的数据。

代价在另一端支付。由于压缩把一切都包在一起,.tar.gz没有目录:要列出其中的内容就得从头解压,要取出最后一个文件就得把全部内容都解压一遍。而ZIP无论多大都能瞬间列出内容。哪种更好,完全取决于这个压缩包是否会被整体解开——而备份和源代码发布包向来都是整体解开的。

哪些能压缩,哪些不能

这是最值得了解的一点,而且适用于所有格式。已经压缩过的文件不会再被压缩。 JPEG、PNG、MP3、MP4、PDF以及其他压缩包,其中的重复内容早已被去除;无论用什么压缩工具处理它们,都只能换来不到1%的缩减,还要白白耗费时间。

所以,五十张照片打成的ZIP,大小基本就是五十张照片的大小——这是格式在正常工作,而不是出了问题。把它们打包的意义,在于只需发送一个文件而不是五十个。文本、文档、源代码、电子表格和未压缩的图片,才是压缩真正发挥作用的地方——常常能压到三分之一甚至更小。

由此可见,为一个装满媒体文件的文件夹挑选压缩率更高的格式,纯属白费力气。对源代码,7z会远胜ZIP;对照片库,几乎没有差别。

为什么没有免费工具能生成RAR

RAR是有主的。RarLab拥有它的授权,WinRAR是付费软件,而唯一能生成RAR的源代码,其许可协议明确禁止用它来开发兼容的压缩工具。不是不鼓励——而是白纸黑字地禁止,并且这是获取源代码的核心条件。

解压则被刻意区别对待。RarLab公开了一份unrar源代码,任何人都可以用它来读取这种格式,这就是为什么7-Zip、The Unarchiver、VLC以及本站都能完全合法地打开RAR文件。打开是允许的,生成则不行。正是这种不对称,让您用过的每一款压缩软件都能解压RAR,却只有一款能生成它。

所以,当某个网站提供“ZIP转RAR”时,实际发生的只可能是以下三种情况之一。 它把您的.zip改名为.rar,这只能骗过文件列表,别的什么都骗不过;它在服务器上运行一份正版WinRAR,意味着您的文件被发送到了陌生人的机器上;或者,它在进度条背后什么也没做。不存在第四种可能。

如果某个系统确实非要这个扩展名,那就购买WinRAR。至于人们真正想用RAR实现的一切——高压缩率、分卷、强加密、恢复记录——7-Zip都做得更好,而且免费。

密码,以及该避开的那一种

ZIP有两种加密方案,二者的差别至关重要。最初的ZipCrypto已被攻破——恢复工具几秒钟就能破解——而数量多得惊人的“给ZIP加密码”工具,至今仍在悄悄使用它。采用AES-256的ZIP是安全的,当前版本的7-Zip和WinZip在您要求加密时生成的就是这种。

即使加密方案可靠,还有第二个陷阱。标准的加密ZIP会让其目录保持可读,所以任何拿到文件的人,无需密码都能清楚看到里面有什么。文档的名称往往和内容一样能说明问题。7z还能加密文件头,这个选项值得勾选。

本站刻意不为压缩包提供密码保护:提供已被攻破的方案比什么都不提供更糟糕,因为它看起来像是保护。如果需要真正私密的压缩包,请使用7-Zip,并选择AES-256和文件头加密。

下载无法恢复的内容

在浏览器中解开源代码发布包或备份之前,这一点值得了解。Unix权限、所有者和符号链接会记录在tar中,但无法通过下载恢复——文件到手时都是普通权限,所以可执行脚本会变得不可执行,符号链接则会变成它实际所占的那个小文件。

如果只是在无法安装任何软件的电脑上阅读文档或取出一张图片,在这里打开再合适不过。如果解开的内容是要编译或运行的,请使用命令行——tar -xzf在每台Mac和Linux电脑上都有,Windows自2018年起也已内置。

常见问题

为什么我的ZIP几乎没变小?

因为放进去的内容本身已经压缩过了——照片、音乐、视频或PDF。这些格式早已去除了自身的重复内容,压缩软件已经找不到可压缩的东西。不过,把许多文件变成一个文件,压缩包依然有用。

把7z发给别人合适吗?

格式本身没问题,问题在于对方能否打开。7-Zip在Windows上免费,macOS上可以用The Unarchiver和Keka——但这终究多了一步,如果对方不太懂技术,用ZIP就能完全省去这番解释。

.tar、.tar.gz和.tgz有什么区别?

.tar是未压缩的——只是把文件连同其元数据首尾相接。.tar.gz就是用gzip压缩后的.tar,而.tgz是同一种东西,只是为了照顾不喜欢两个点的系统而起的短名称。此外还有.tar.bz2和.tar.xz,压缩率更高,速度也更慢。

没有WinRAR能打开RAR吗?

能,而且很容易。7-Zip、The Unarchiver、Keka甚至VLC都能读取RAR文件,本站也可以。受限制的只是生成RAR。

设了密码的ZIP真的安全吗?

如果用的是AES-256,是安全的,但要注意:除非使用能加密文件头的格式,否则文件名仍然可读。如果用的是旧式ZipCrypto——有些工具至今仍在使用却不说明——那就不安全;只能把它当作一道障碍,而不是保护。