GNU/Linux >> Tutoriels Linux >  >> Linux

Fichiers avec le même contenu mais avec des sommes md5 différentes lorsque gzip'd ?

Selon la RFC 1952, le gzip l'en-tête du fichier inclut l'heure de modification du fichier d'origine (champ MTIME ). Vous pouvez afficher l'en-tête en texte brut avec 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

Donc, si vous voulez vraiment comparer les fichiers gzip, compressez-les avec le -n option, pour ne pas enregistrer le nom du fichier d'origine et l'horodatage ,

gzip -n renew.log s3/renew.log 

et leur md5sum doivent être identiques.

Sinon, vous pourriez utiliser

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

pour calculer le md5sum des fichiers décompressés.

Cependant, l'heure et la date affichées ne sont pas tirées de l'en-tête, mais représentent les valeurs actuelles ; c'est aussi le cas pour le nom du fichier :

$ 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

Pourquoi vous attendez-vous à ce que la version compressée du même fichier soit la même ? Le programme de compression (gzip) peut inclure un horodatage dans l'en-tête ou utiliser des algorithmes aléatoires.

Et justement ! L'en-tête gzip contient l'horodatage. Si vous voulez que vos fichiers compressés soient identiques, votre fichier doit avoir le même horodatage !

Ainsi, lorsque vous copiez un fichier, faites-le toujours en tant que cp -p file1 file1 , pas seulement cp file1 file2 - c'est en fait une mauvaise habitude !


Utilisez simplement gzip avec le drapeau '-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

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


Linux
  1. Linux - Différents formats de fichiers objets sous Linux ?

  2. Makefiles avec des fichiers source dans différents répertoires

  3. bash :/bin/tar :liste d'arguments trop longue lors de la compression de nombreux fichiers avec tar

  4. Linux Bash :Déplacez plusieurs fichiers différents dans le même répertoire

  5. Exclure les fichiers cachés lors de la recherche avec Unix/Linux find ?

Comment rediriger stderr et stdout vers différents fichiers dans la même ligne de script ?

tar/gzip excluant certains fichiers

Lors de la lecture d'un fichier avec "moins" ou "plus", comment puis-je obtenir le contenu en couleurs ?

Comment puis-je exécuter une commande différente mais avec les mêmes arguments ?

créer des fichiers vides avec la même structure de répertoires que le répertoire de référence

Pourquoi find -mtime ne fonctionne-t-il pas comme prévu sur des fichiers avec des fuseaux horaires différents ?