在什么情况下 tarball (.tgz) 的大小与原始文件的大小几乎相同

在什么情况下 tarball (.tgz) 的大小与原始文件的大小几乎相同

我刚刚使用 .tarball 压缩了一些网站的转储(配置、图像目录、css 目录和网站内容(html 文件等))tar czf sitedump.tgz backup_folder/。原始的“backup_folder”大约有 600MB,压缩包也是如此,只是小了一点。

什么情况对这些压缩格式提出了挑战?在这种情况下,尺寸减小幅度最小的可能原因是什么?焦油版本 1.23

答案1

这是一个问题无损数据压缩,即其之一局限性。通常,数据越随机,压缩就越困难,因为压缩基本上是寻找模式并用更少的信息表示它们(您可能认为它能够从句子的开头预测后面的单词)。因此,噪声(几乎)完全不可压缩,而长重复序列可以被很好地压缩。如果您想要的不仅仅是这种挥手,上面提供的链接可能是一个很好的起点。

至于 tarball - 除了数据文件、磁带档案(即“tar”最初代表的意思)包含文件元数据(通常每个文件有一个或多个 512B 块,具体取决于具体的 tar 风格),并且也被压缩。因此,如果你真的想让它尽可能不可压缩,你需要使用随机文件名、随机用户/组 ID/名称、文件模式,确保包含噪声的文件和文件元数据的大小为512B 块(以防止用零填充)。

存档大得惊人的另一个原因可能是压缩级别较低gzip- 对于独立版本,压缩级别由(无压缩)到(最大压缩)gzip给出,默认值为.-0-9-6

如果您确实想尽可能地压缩它,您可能需要使用不同的算法(以及压缩程序)。xz通常被认为是表现最好的人。

答案2

如果您有一个中等规模的网站,除非它有大量用户贡献的内容,否则它可能有几兆字节的 HTML、CSS、JavaScript、PHP 等。这些内容通常可以很好地压缩。

这意味着这些图像大约是 tarball 的 99%。图像已经被压缩,因此再次压缩它们不会减小大小(或者如果它们是不同的压缩算法,则只会减小一点点 - 以非常高的质量因数对 JPEG 图像进行 gzip 压缩可以稍微减小大小)。

假设您有 5MB 的文本和代码,压缩比为 1:3,以及 600MB 的图像,压缩比为 1:1.01。结果是一个 595MB 的存档。

在Linux系统上,您可以运行命令du --exclude='*.jpg' --exclude='*.png' --exclude='*.gif'来累加目录下的文件大小,不包括常见的图像格式。

相关内容