You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何区分拥有相同魔数的gzip与TarGzip格式文件?

区分gzip与TarGzip文件的方法

二者魔数均为十六进制1f 8b的原因非常简单:TarGzip(.tar.gz)本质就是先将多个文件/目录打包为tar归档,再用标准gzip算法压缩整个tar包,外层完全符合gzip格式规范,所以外层魔数和普通gzip文件没有任何区别,区分的核心是校验gzip解压后的内容格式。

以下是具体可用的区分方案:

  • 直接用系统内置命令识别(最简便)
    类Unix系统内置的file命令已经内置了判断逻辑,它会在识别到gzip格式后,进一步读取部分内容做流式解压,校验解压后的数据是否符合tar归档的格式特征,直接执行以下命令即可得到结果:

    file <目标文件路径>
    

    输出结果区分非常明确:

    • 普通gzip文件:输出类似gzip compressed data, original size ...
    • TarGzip文件:输出类似gzip compressed data, was "xxx.tar", last modified: ...
  • 手动验证逻辑(适合代码实现)
    不需要完整解压整个文件,只需要读取部分数据即可完成判断,逻辑如下:

    1. 读取文件前2字节,确认是1f 8b的gzip魔数
    2. 对文件做流式gzip解压,仅读取到解压后数据的第257字节偏移位置即可停止
    3. 校验该偏移位置开始的连续5字节是否为十六进制75 73 74 61 72(对应ASCII字符串ustar,是tar格式的标准魔数):如果匹配则为TarGzip文件,否则为普通gzip文件。
  • 解压后验证
    如果你已经做了解压操作,直接判断解压后的文件是否为tar归档即可:
    普通gzip解压后得到的是原始的单个业务文件,而TarGzip解压后得到的是.tar格式的归档文件,再次用file命令或者tar工具校验即可,执行tar -tf <解压后的文件路径>如果能正常列出归档内的文件列表,就说明原文件是TarGzip格式。

内容的提问来源于stack exchange,提问作者Samarth Singhal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:36:09