超过 4 GB 的 gzip 文件的可移植性如何?

Pet*_*r B 10 tar gzip files portability

为了备份我的工作快照,我运行了一个命令,比如tar -czf work.tgz work创建一个 gzip 压缩的 tar 文件,然后我可以将其放入云存储中。但是,我刚刚注意到 gzip 的大小限制为 4 GB,而我的work.tgz文件超过 4 GB。

尽管如此,如果我在当前计算机(运行 Mac OS X 10.15.4,gzip 版本称为 Apple gzip 287.100.2)上创建一个 gzip tar 文件,我可以成功检索它。所以在我的特殊情况下,gunzip 可以在 >4GB 上工作。但我希望能够在 Mac OS X 或 Linux 以及未来可能的其他系统上创建和读取这些大型 gzip 文件。

我的问题是:我可以在任何地方解压/gunzip 大文件吗?换句话说,大小超过 4 GB 的 gzip 文件的可移植性如何?如果我在 Mac OS、Linux 或其他平台上创建它有关系吗?

一些在线阅读表明 gzip 将成功 gzip/gunzip 一个更大的文件,但不会正确记录未压缩的大小,因为大小存储为 32 位整数。这就是极限吗?

Ste*_*itt 21

我刚刚注意到 gzip 有 4 GB 的大小限制

更准确地说,该gzip格式无法正确存储超过 4GiB 的未压缩文件大小。结果是,gzip -l对于原始大小超过 4GiB 的任何压缩文件,都不会显示正确的大小。

除此之外,gzip本身没有限制,gzip超过4GiB的ped文件是可移植的。该格式由RFC 1952指定,并且对它的支持广泛可用。(严格来说,该gzip格式存储未压缩数据模 2 32的大小;gzip -l出于这个和其他原因,这是一种误导。)

我可以在任何地方解压/gunzip 大文件吗?

任何可以处理大文件的地方,以及符合规范的tar和实现gunzip可用的地方。

换句话说,大小超过 4 GB 的 gzip 文件的可移植性如何?

gzip格式本身是便携式的,而且gzip文件也便于携带,无论它们所包含的数据的大小。

如果我在 Mac OS、Linux 或其他平台上创建它有关系吗?

不,gzip在任何平台上创建的文件都可以在具有所需功能(特别是在此问题的上下文中存储大文件的能力)的任何其他平台上解压缩。

另请参阅压缩实用程序最大文件大小限制 | Unix/Linux

  • 它正确存储了不是原始文件大小的内容。 (16认同)
  • @SimonRichter 好问题,而且确实如此:`echo "This is a pipe test" | gzip -9 | cat > file.gz`(额外的 `cat` 以确保 `gzip` 正在写入管道)产生一个 `file.gz`,它使用 `gzip -l` 显示准确的信息。然而,`gzip -l` 在从管道输入时不显示大小;比较`gzip -l file.gz`、`gzip -l <​​ file.gz` 和`cat file.gz | gzip -l`。 (2认同)
  • @UncleBilly,你是什么意思“甚至不假装”?在大多数情况下,该 32 位值正是文件大小,即使实际大小更高且值溢出,_pretend_ 听起来也是对结果的非常贴切的描述。 (2认同)