13

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

4 Answers 4

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

6
  • I read somewhere that tar -cz defaults to 9. Is that true?
    – rabin
    Apr 12, 2011 at 16:37
  • 3
    Yes. GNU tar uses level 9 by default when gzipping. Apr 12, 2011 at 17:26
  • 2
    Python also defaults to a compression level on 9: docs.python.org/3/library/gzip.html
    – RFox
    Feb 15, 2016 at 14:28
  • 1
    Is it in the tar source or documented somewhere that -9 is the default?
    – xref
    Apr 29, 2018 at 2:22
  • nginx defaults to level 1 by the way. nginx.org/en/docs/http/… Jun 11, 2022 at 6:17
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!

4
  • This is the best answer. Sep 11, 2015 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, 2015 at 3: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: bugs.python.org/issue27521 Nov 16, 2016 at 5:15
  • For me file only shows gzip compressed data.
    – bluenote10
    Apr 8, 2022 at 19:23
7

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

1
  • 2
    While the assertion about elvel is false, the command is useful for comrpession ratio.
    – mveroone
    Oct 19, 2015 at 13:04
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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .