5 votes

Gzip est-il censé respecter le nom de fichier original lors de la décompression ?

Cette question découle d'une question sur la bibliothèque Crypto++ sur Stack Overflow : Comment ajouter un nom de fichier à l'archive si on la compresse avec la classe Gzip ? .

Gzip, comme spécifié dans RFC 1952 comporte un champ facultatif pour le nom du fichier original :

  (if FLG.FNAME set)

     +=========================================+
     |...original file name, zero-terminated...| (more-->)
     +=========================================+

Si le FNAME est activé dans le champ drapeau, alors le nom de fichier original est présent.

Nous avons ajouté cette fonctionnalité à Crypto++ et l'avons testée sur OS X. Sur OS X, il semble que la gzip le programme Unarchiver (le programme d'archivage par défaut), et le logiciel Navigateur d'archives (achat sur App Store) ne respectent pas le nom de fichier original. En d'autres termes, chaque fichier se décompresse en un nom de fichier qui est le nom de l'archive sans l'élément gz et non le nom du fichier original tel qu'il apparaît dans l'en-tête.

Par exemple, voici une image sous la rubrique Navigateur d'archives . Le champ du nom de fichier original est défini comme suit test-filename.txt mais l'outil affiche le nom du fichier comme suit gzip-test et le décompresse dans un fichier nommé gzip-test :

enter image description here

GZip (et Gunzip ) est pas une norme IEEE Commande Unix Je n'arrive donc pas à savoir où chercher des informations sur le comportement attendu.

Est-ce un comportement attendu ? Ou est-ce que je vois un bug dans trois programmes différents ?

Si c'est prévu, alors à quoi sert le nom de fichier original ?

5voto

joshua Points 31

Según el page de manuel de gzip en utilisant le -N o --name lors de l'utilisation de l'option gunzip récupère le nom du fichier original. -N est la valeur par défaut lors de la compression (donc gzip enregistre toujours le nom du fichier d'origine) mais pas lors de la décompression, il doit donc être utilisé explicitement avec la fonction gunzip .

J'ai testé cela comme suit :

$ ls
test.txt

$ gzip test.txt
$ ls
test.txt.gz

$ mv test.txt.gz widget.gz

$ gunzip -N widget.gz
$ ls
test.txt

... ce qui est le résultat que nous recherchions.

3voto

Xen2050 Points 13136

Gzip / gunzip (version 1.6 dans Linux Mint / Ubuntu) ne fait pas apparaître de se souvenir ou d'utiliser les noms de fichiers originaux, mais apparemment peut . Ma réponse initiale, après quelques tests de base, était qu'il ne sauvegardait pas les noms de fichiers, mais j'étais trompé par la tromperie --list sortie (probablement comme l'OP l'était aussi).

La page de manuel indique qu'il peut sauvegarder et utiliser le nom de fichier original, mais même lors de la création d'un fichier .gz avec la commande -N or --name lors de l'énumération ( -l ) le contenu de ce fichier .gz le uncompressed_name La colonne "base" énumère le nom de fichier actuel "base".

$ echo test > t1
$ gzip -vkN t1
t1: -40.0% -- replaced with t1.gz

$ gzip -vl t1.gz 
method  crc     date  time           compressed        uncompressed  ratio uncompressed_name
defla 3bb935c6 Jan  3 14:59                  28                   5 -40.0% t1

$ cp t1.gz N1.gz
$ gzip -vl N1.gz 
method  crc     date  time           compressed        uncompressed  ratio uncompressed_name
defla 3bb935c6 Jan  3 15:04                  28                   5 -40.0% N1

Sauf si vous utilisez également le -N lors des tests et de l'établissement des listes, entonces il affiche le nom du fichier original

$ gzip -vlN t1.gz 
method  crc     date  time           compressed        uncompressed  ratio uncompressed_name
defla 3bb935c6 Jan  3 14:59                  28                   5 -40.0% t1
$ gzip -vlN N1.gz 
method  crc     date  time           compressed        uncompressed  ratio uncompressed_name
defla 3bb935c6 Jan  3 14:59                  28                   5 -40.0% t1

Décompresser sans utiliser la fonction -N ne permet pas non plus de restaurer le nom de fichier original,

Je ne pensais pas que gzip avait déjà sauvegardé ou utilisé le nom de fichier original, c'est plus une compression "un fichier à la fois" souvent utilisée pour les fichiers .tar, avec tar sauvegardant plusieurs fichiers et leurs noms, l'utilité de gzip sauvegardant les noms semble limitée.

D'autres formats d'archives compressées comme .zip, .7z, se souviennent également des noms de fichiers, puisqu'ils archivent et compressent plusieurs fichiers, ils sont comme un .tar.gz en un.

En parlant de cryptographie, gpg peut se souvenir et utiliser les noms de fichiers originaux (en tout cas lorsqu'il utilise sa fonction -c chiffrement symétrique sur un seul fichier, devrait aussi fonctionner pour le chiffrement à clé publique).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X