在 MacOS 上压缩 .gz 文件时遇到问题
Posted
技术标签:
【中文标题】在 MacOS 上压缩 .gz 文件时遇到问题【英文标题】:Trouble gunzipping .gz files on MacOS 【发布时间】:2020-10-26 13:57:18 【问题描述】:Eurostat 欧洲数据库提供了大量的 gzipped 文件如https://ec.europa.eu/eurostat/estat-navtree-portlet-prod/BulkDownloadListing?file=data/env_air_gge.tsv.gz
当我下载这些文件然后双击它们时,它们会被 MacOS 上的存档实用程序正确解压缩。但是当我尝试在 MacOS 终端上使用 gunzip 时,目标文件被压缩为... gz 文件(不带扩展名)。
我尝试在自定义的 Objective-C 应用程序中使用GZIP API(以及使用 zlib 设计的自定义放气函数):两者的结果与终端应用程序中的 gunzip 相同。相反,在 Linux 程序中使用相同的 C 放气函数可以完美地处理这些 gzip 文件。
MacOS 上的 zlib 库和命令行 gunzip 有什么问题会阻止它们正确处理某些 gz 文件?这个问题显然已经被 MacOS 附带的存档实用程序解决了......
[UPDATE] 这变得更奇怪了:当我从另一个来源(例如https://github.com/dhalperi/cse550-code-data/raw/master/density-peaks/rawdata/sample.csv.gz)获取gz 文件时,一切正常。所以问题出在 Eurostat 网站 + MacOS 的组合上!
[[UPDATE]] 找到解决方案:
• 在 Eurostat 的 http 响应中,Content-Type 定义为“application/octet-stream”(编码定义为“gzip”)。
• 使用此设置,服务器会即时压缩文件,使其被压缩两次
• 当 Content-Type 定义为“application/x-gzip”时,服务器不会对其进行 gzip,文件可以一次解压...
• 分析服务器响应允许检测两次 gzip 压缩文件以了解何时需要进行两次解压缩。
【问题讨论】:
你用什么命令解压压缩包? 这不是 zip 而是 gzip。正如我所解释的,我使用了 GZIP API、自定义 C 例程和 MacOS 终端的 gunzip 程序。两者都无法扩展 gz。在 Linux PC 上,没有问题。而在 MacOS 和其他 gz 源上,没有问题。它只发生在 MacOS 上 Eurostat 的 gzip 文件gunzip env_air_gge.tsv.gz
对我来说很好!
【参考方案1】:
对我来说似乎很好。你是怎么下载的?下载后文件大小是多少?我得到 2,989,400 字节。
在 cmets 中,您的更大。它可能已被多次压缩。存档实用程序将继续对其进行压缩,直到它不再具有 gzip 标头。您必须自己使用命令行 gunzip 来执行此操作。
【讨论】:
下载是使用 NSURLSession 和 dataTaskWithURL 方法进行的。此过程不静默解压:下载的gz文件为3MB。使用 gunzip 或几个 gzip API 后,它仍然是 ~3MB,带有 gzip 标头。使用 MacOS 提供的 Archive Utility,il 扩展到 12,4MB... 我在macOS终端中使用了gunzip,没问题。在您链接的两个文件上。 (顺便说一下,它们是不同的文件,而不是同一个文件。) 下载的~3MB文件的确切大小是多少,前十个字节是多少? 下载的文件大小为 2 997 731 字节。第一个字节是:\x1f\x8b\b 也许它正在从 http 服务器获得另一个 gzip 包装器。解压后的具体尺寸是多少?你有没有尝试在解压的结果上加个.gz,然后再尝试解压?以上是关于在 MacOS 上压缩 .gz 文件时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章