12

Given a gzip compressed file, how do I know what compression level (1-9) was used for it?

rabin
  • 325

4 Answers4

34

It is stored in the header of file. To see it, use file command. For example:

$ file testfile.gz
testfile.gz: gzip compressed data, from Unix, last modified: Sun Sep 15 14:22:19 2013, max compression

Unfortunately there are only three possible values in the header: max speed (level 1), max compression (level 9) and "normal" (all other levels). But better than nothing!

Zouppen
  • 441
  • This is the best answer. – Florin Andrei Sep 11 '15 at 20:05
  • 2
    Looks like the rest of a compressed file isn't any clearer. Test-compressing a 201 bytes file with all levels resulted in only 4 different outputs - partitioned by levels as (1,23,45678,9) - with levels 1 and 9 specifically marked (see XFL in RFC1952; that's why file can recognise those). A 10^7 bytes file still only resulted in 7 unique outputs - partitioned (1,2,3,4,5678,9). While this doesn't mean different levels are useless for bigger files, it shows you can't assume 9 unique outputs. – valid Nov 10 '15 at 03:38
  • 3
    Every version of Python until 3.5 (maybe even including 3.6) sets the compression level in the header to 9 even when it is not. Just a bug, but FYI: https://bugs.python.org/issue27521 – John Zwinck Nov 16 '16 at 05:15
  • For me file only shows gzip compressed data. – bluenote10 Apr 08 '22 at 19:23
7

There is no way to directly determine gzip level .
The only way to determine it in my opinion is to gunzip the file and compressing it at different levels and then comparing the results with your existing file size.
I believe the default level is 6 so in most cases that should be your answer

Shekhar
  • 5,069
  • I read somewhere that tar -cz defaults to 9. Is that true? – rabin Apr 12 '11 at 16:37
  • 3
    Yes. GNU tar uses level 9 by default when gzipping. – Andrew Lambert Apr 12 '11 at 17:26
  • 2
    Python also defaults to a compression level on 9: https://docs.python.org/3/library/gzip.html – RFox Feb 15 '16 at 14:28
  • 1
    Is it in the tar source or documented somewhere that -9 is the default? – xref Apr 29 '18 at 02:22
  • nginx defaults to level 1 by the way. https://nginx.org/en/docs/http/ngx_http_gzip_module.html#gzip_comp_level – Quoting Eddie Jun 11 '22 at 06:17
  • @AndrewLambert Source for that information? I tried GNU tar 1.34 on Debian Bookworm and in the git shell for Windows. Both default to -6. Also confirmed by https://superuser.com/a/305134/165722 – jlh Dec 11 '23 at 10:44
7

gzip -l <filename> will give you the compression ratio, but there's no way of directly finding the compression level used.

2

There is no direct way of knowing it. It most probably 6 (the current default) or 9 (the best compression). you need to try and compare.

See https://stackoverflow.com/questions/16153334/how-to-determine-the-compression-level-of-deflate