Une fois un fichier compressé, y a-t-il un moyen de l'interroger rapidement pour dire quelle est la taille du fichier non compressé (sans le décompresser), en particulier dans les cas où le fichier non compressé a une taille> 4 Go.
Selon la RFC https://tools.ietf.org/html/rfc1952#page-5, vous pouvez interroger les 4 derniers octets du fichier, mais si le fichier non compressé était> 4 Go, la valeur représente simplement leuncompressed value modulo 2^32
Cette valeur peut également être récupérée en exécutant gunzip -l foo.gz
, mais la colonne "non compressée" contient juste à uncompressed value modulo 2^32
nouveau, probablement pendant la lecture du pied de page comme décrit ci-dessus.
Je me demandais simplement s'il y avait un moyen d'obtenir la taille du fichier non compressé sans avoir à le décompresser au préalable, cela serait particulièrement utile dans le cas où les fichiers compressés contiennent plus de 50 Go de données et prendraient un certain temps pour décompresser en utilisant des méthodes comme gzcat foo.gz | wc -c
EDIT: La limitation de 4 Go est ouvertement reconnue dans la man
page de l' gzip
utilitaire inclus avec OSX ( Apple gzip 242
)
BUGS
According to RFC 1952, the recorded file size is stored in a 32-bit
integer, therefore, it can not represent files larger than 4GB. This
limitation also applies to -l option of gzip utility.
la source
gzip
doit être plus âgé que de nombreux utilisateurs de cette communauté!gzip
est sorti en 1992. Je serais surpris s'il y avait beaucoup de jeunes de 23 ans qui errent ici. Je suis sûr qu'il y en a mais d'après ce que je peux dire, l'âge médian se situe autour de 30-35 ans.xz
qui n'a pas cette limitation. GNU passe àxz
.xz
cela «résoudrait» ce problème.Réponses:
Je crois que le moyen le plus rapide est de modifier de
gzip
sorte que les tests en mode verbeux produisent le nombre d'octets décompressés; sur mon système, avec un fichier de 7761108684 octets, j'obtiensPour modifier gzip (1.6, comme disponible dans Debian), le patch est le suivant:
la source
-t
déjà optimisé à cet égard? L'amélioration est suffisamment petite pour donner l'impression que vous n'avez enregistré que le temps de sortie.gzip
; Je viens de courirgzip
sur les fichiers compressés, ce qui ne les recompresse pas, il les vérifie. (Le patch est une preuve de concept rapide et sale, il a besoin de quelques modifications supplémentaires pour fonctionnergunzip
.)FCOMMENT
terrain. De cette façon, les utilisateurs peuvent interroger une plage d'octets pour récupérer ces données. Cela serait utile dans mon cas, en particulier pour les articles stockés dans Amazon S3Si vous avez besoin de la taille d'un fichier compressé ou un ensemble de fichiers, votre meilleur pari est d'utiliser
tar -z
ou autar -j
lieu degzip
quetar
comprend la taille des fichiers non compressés. Utilisezlesspipe
pour jeter un œil à la liste des fichiers:Si
less
est configuré pour utiliserlesspipe
:N'oubliez pas que cela peut prendre très longtemps. Cependant, votre système reste réactif, ce qui vous permet de tuer le processus de décompression.
Une autre approche consisterait à enregistrer le rapport compressé et à interroger ce fichier [texte] à la place:
Il nécessite cependant des calculs pour trouver la taille réelle du fichier.
Vous pouvez également faire de même avec
tar
, ce qui est en fait ce que je fais avec les sauvegardes de grande taille car cela empêche d'exécuter tout le processus de décompression pour obtenir uniquement une taille de fichier ou un nom, par exemple.la source
tar
vous avez la taille du fichier d'origine enregistré dans l'archive. D'un autre côté, je ne suis pas sûr dezip
se comporter différemment.wc -c
commande.Qu'en est-il de
la source
Cela prendra beaucoup de temps, mais vous donnera la taille finale en octets.
la source