GNU/Linux >> Linux Esercitazione >  >> Linux

File con lo stesso contenuto ma con diverse md5sum quando gzip'd?

Secondo RFC 1952, il gzip l'intestazione del file include l'ora di modifica del file originale (campo MTIME ). Puoi visualizzare l'intestazione in testo semplice con gzip -lv renew.log.gz :

method  crc     date  time           compressed        uncompressed  ratio uncompressed_name
defla 64263ac7 Jun 21 17:59                 314                 597  52.1% renew.log

Quindi, se vuoi davvero confrontare i file compressi con gzip, comprimili con -n opzione, per non salvare il nome del file e il timestamp originali ,

gzip -n renew.log s3/renew.log 

e la loro somma md5 dovrebbe essere identica.

Altrimenti potresti usare

md5sum <(zcat renew.log.gz) <(zcat s3/renew.log.gz)

per calcolare la md5sum dei file decompressi.

Tuttavia, l'ora e la data visualizzate non vengono prese dall'intestazione, ma rappresentano i valori correnti; questo vale anche per il nome del file:

$ gzip renew.log 
$ mv renew.log.gz foo.gz
$ gzip -lv foo.gz -------- uncompressed name is taken from current name ---v
method  crc     date  time           compressed        uncompressed  ratio uncompressed_name
defla 6c721644 Jul 11 22:34                 580                1586  65.7% foo
$ hexdump -C foo.gz | head -n 2
00000000  1f 8b 08 08 f0 16 df 51  00 03 72 65 6e 65 77 2e  |.......Q..renew.|
00000010  6c 6f 67 00 8d 93 dd 6e  9b 30 18 86 8f 89 94 7b  |log....n.0.....{|
                                                             ^^^-------^^^^^
                                                  original filename is stored in the header

Perché ti aspetti che la versione compressa dello stesso file sia la stessa? Il programma di compressione (gzip) può includere alcuni timestamp nell'intestazione o può utilizzare alcuni algoritmi randomizzati.

Ed esattamente! L'intestazione gzip contiene il timestamp. Se vuoi che i tuoi file compressi siano gli stessi, il tuo file deve avere lo stesso timestamp!

Quindi, quando copi un file, fallo sempre come cp -p file1 file1 , non solo cp file1 file2 - in realtà è una cattiva abitudine!


Basta usare gzip con il flag '-n':

[email protected]:~$ gzip -n Yippie-Ki-Yay.mp3 bla/Yippie-Ki-Yay.mp3 

[email protected]:~$ sha1sum Yippie-Ki-Yay.mp3.gz bla/Yippie-Ki-Yay.mp3.gz 
b44b21c5f414935f1ced1187bfafd989704474a5  Yippie-Ki-Yay.mp3.gz
b44b21c5f414935f1ced1187bfafd989704474a5  bla/Yippie-Ki-Yay.mp3.gz

Fonte:https://unix.stackexchange.com/questions/31008/why-does-the-gzip-version-of-files-produce-a-different-md5-checksum


Linux
  1. File di gatto con directory?

  2. Confronta le directory ma non il contenuto dei file?

  3. Linux:diversi formati di file oggetto in Linux?

  4. Come reindirizzare stderr e stdout a file diversi nella stessa riga nello script?

  5. tar/gzip escludendo alcuni file

Script Bash per eliminare tutti i file tranne N quando sono ordinati alfabeticamente

Linux Bash:sposta più file diversi nella stessa directory

Quando leggo un file con "meno" o "più", come posso ottenere il contenuto a colori?

Escludere i file nascosti durante la ricerca con Unix/Linux find?

È possibile condividere file tra 2 sistemi operativi diversi sullo stesso computer?

Perché find -mtime non funziona come previsto su file con fusi orari diversi?