Gzip 是否应该在解压缩期间尊重原始文件名?

jww*_*jww 5 compression gzip archiving filenames

这个问题源于 Stack Overflow 上的一个 Crypto++ 库问题:如果使用 Gzip 类压缩,如何将文件名添加到存档?.

RFC 1952 中指定的 Gzip具有原始文件名的可选字段:

  (if FLG.FNAME set)

     +=========================================+
     |...original file name, zero-terminated...| (more-->)
     +=========================================+
Run Code Online (Sandbox Code Playgroud)

如果FNAME在标志字段中设置了该位,则存在原始文件名。

我们将该功能添加到 Crypto++ 并在 OS X 上进行了测试。在 OS X 上,gzip程序 The Unarchiver(默认存档程序)和Archive Browser(App Store 购买)似乎不支持原始文件名。也就是说,每个解压缩到一个文件名,即没有gz扩展名的档案名;而不是出现在标题中的原始文件名。

例如,这是存档浏览器下的图像。原始文件名字段设置为test-filename.txt,但该工具将文件名显示为gzip-test,并将其解压缩为名为 的文件gzip-test

在此处输入图片说明

GZip(and Gunzip)不是IEEE 标准的Unix Command,所以我真的不知道在哪里寻找有关预期行为的知识。

这是预期的行为吗?还是我在三个不同的程序中看到了一个错误?

如果是预期的,那么原始文件名有什么实际用途?

Sim*_*mon 5

根据gzip 手册页,使用时使用-N--name选项可以gunzip恢复原始文件名。-N是压缩时的默认值(因此gzip始终保存原始文件名),但在解压缩时不是,因此必须与gunzip.

我对此进行了如下测试:

$ ls
test.txt

$ gzip test.txt
$ ls
test.txt.gz

$ mv test.txt.gz widget.gz

$ gunzip -N widget.gz
$ ls
test.txt
Run Code Online (Sandbox Code Playgroud)

...这是我们正在寻找的结果。