68

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

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

4

4 回答 4

100

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

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

其他:

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

If you're on a Linux box just use the 'file' command.

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
$
于 2013-10-01T15:55:48.847 回答
6

As an alternative to inspecting the file header by hand, you could use some utility like TrID. The link points to the cross-platform command line version; for Windows there's a GUI, too.

于 2013-10-01T15:55:39.713 回答
0

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

于 2021-07-16T15:24:49.680 回答