Comando Gzip para produzir exatamente a mesma saída que tar -cvzf?

2

Eu pensei que os comandos a seguir eram equivalentes, mas eles produzem somas de verificação diferentes:

tar -cvzf ... e tar -cvf ...; gzip ... não produzem a mesma saída.

sha1sum difere.

Qual seria o comando gzip que combinaria perfeitamente com o comportamento tar -cvzf ?

    
por Olivier 27.11.2012 / 17:34

1 resposta

5

A diferença nos arquivos de saída provavelmente NÃO é devida ao método de compactação. Por padrão, o tar GNU usa o modo padrão GZIP deflate . Um motivo para a diferença está no formato do arquivo compactado GZIP.

A estrutura dos primeiros 8 bytes do cabeçalho do GZIP é a seguinte

      OFFSET  SIZE  VALUE    COMMENT
        0       1    0x1F    First "magic" id
        1       1    0x8B    Second "magic" id
        2       1    CM      Compression method
        3       1    FLAGS   8-bit flag register
        4       4    MTIME   Object modification time

O problema é com o campo MTIME . Para dados provenientes de um pipe, esse é o valor do tempo atual do Unix (segundos desde 1º de janeiro de 1970). Portanto, dois arquivos compactados idênticos criados com pelo menos um segundo intervalo um do outro serão diferentes.

Tente executar tar -cvzf duas vezes nos mesmos dados e compare os resultados. Os resultados serão diferentes no quinto byte, o byte mais baixo do valor do registro de data e hora.

$ tar czvf test1.tgz tmp/ ; sleep 2 ; \
  tar czvf test2.tgz tmp/ ; md5sum test1.tgz test2.tgz
tmp/
tmp/test
tmp/
tmp/test
23d46f62dd4a9a0851279df7fe15842e  test1.tgz
c8ae65026a5f771c63acf87a18f7379c  test2.tgz
    
por 27.11.2012 / 19:47