【问题标题】:How to detect type of compression used on the file? (if no file extension is specified)如何检测文件上使用的压缩类型? (如果没有指定文件扩展名)
【发布时间】:2013-10-07 21:04:15
【问题描述】:

如何检测文件上使用的压缩类型? (假设未指定 .zip、.gz、.xz 或任何其他扩展名)。

这些信息是否存储在该文件的标题中?

【问题讨论】:

    标签: binary compression


    【解决方案1】:

    您可以通过查看前几个字节来确定它可能是其中一种格式。然后,您应该使用相关实用程序对该格式的完整性检查或实际继续解压缩来测试它是否真的是其中之一。

    您可以在描述中找到标题格式:

    其他:

    • zlib (.zz) format description,以两个字节(以位为单位)0aaa1000 bbbccccc 开头,其中选择 ccccc 以便第一个字节被视为 int16 乘以 256 加上第二个字​​节被视为 int16 是 31 的倍数。例如:01111000(位) = 120(int16), 10011100(bits) = 156(int16), 120 * 256 + 156 = 30876 是 31 的倍数
    • 压缩 (.Z) 以 0x1f、0x9d 开头
    • bzip2 (.bz2) 以 0x42、0x5a、0x68 开头
    • Zstandard (.zstd) format description,帧以 little-endian 格式 0xFD2FB528 的 4 字节幻数开始,可跳过的帧以 0x184D2A5? 开始(问号是从 0 到 F 的任何值)和字典以0xEC30A437 开头。
    • magic database 中的更多格式来自 file 命令

    【讨论】:

    • 如果您使用的是 linux,以下是查看文件前几个字节的十六进制表示的方法:xxd file
    • $ od -x t1 文件名 |头
    • @gstein 也许你的意思是od -tx1
    【解决方案2】:

    如果您使用的是 Linux 机器,只需使用“文件”命令即可。

    http://en.wikipedia.org/wiki/File_(command)

    $ mv foo.zip dink
    $ file dink
    dink: gzip compressed data, from Unix, last modified: Sat Aug  6 08:08:57 2011,
    max compression
    $
    

    【讨论】:

      【解决方案3】:

      作为手动检查文件头的替代方法,您可以使用一些实用程序,例如 TrID。链接指向跨平台命令行版本;对于 Windows,也有一个 GUI。

      【讨论】:

        【解决方案4】:

        如果您想确定用于压缩 linux 内核的算法,有一个脚本可以解决此问题,请参阅以下问题和答案:https://unix.stackexchange.com/a/553192/264065

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-11
          • 1970-01-01
          • 2019-01-31
          • 1970-01-01
          • 2012-06-11
          • 1970-01-01
          相关资源
          最近更新 更多