web-dev-qa-db-fra.com

Comment obtenir la taille non compressée du fichier gzip sans le décompresser?

S'il vous plaît trouver mes détails du système d'exploitation:

$ uname -a
AIX xxyy 1 6 000145364C00

J'ai essayé la commande suivante pour obtenir la taille d'un fichier dans l'archive gzip:

$ gzip -l mycontent.DAT.Gz
compressed  uncompr.   ratio   uncompressed_name
-1223644243 1751372002 -75.3%  mycontent.DAT.Gz

Vous ne savez pas comment interpréter la taille décompressée à partir de cela. La taille du fichier compressé est proche de 4 Go.

J'ai donc essayé cette option pour capturer les données correctes:

$ zcat mycontent.DAT.Gz | wc -c

Cela me donne cette erreur:

mycontent.DAT.Gz.Z:A file or directory in the path name does not exist.
0

Pouvez-vous s'il vous plaît me dire comment capturer cette valeur à partir d'un script shell sans décompresser le fichier source?

23
user238010

Pour répondre au titre de la question:

Comment obtenir la taille non compressée du fichier gzip sans le décompresser?

Comme vous le savez évidemment, l'option -l (--list) affiche généralement la taille non compressée.
Ce qu'il montre n'est pas calculé à partir des données, mais a été stocké dans l'en-tête en tant que partie du fichier compressé.

Dans votre cas, l'option -l ne fonctionne pas pour une raison quelconque.
Mais il n’est pas possible de "mesurer" la taille non compressée à partir des données compressées brutes - il n’ya simplement aucune information sur les autres données compressées - ce qui n’est pas surprenant, car le but de la compression est de ne rien omettre pas besoin.

Vous n'avez pas besoin de stocker les données non compressées sur le disque: zcat file.gz | wc -c est la bonne approche - mais comme l'a répondu @OleTange, votre zcat ne semble pas être celui de gzip.
L’alternative utilise les gzip options -d (--decompress) et -c (--to-stdout), associées à wc option -c (--bytes):

gzip -dc file.gz | wc -c
22
Volker Siegel

Vous zcat n'est pas GNU zcat mais à partir de compresser. Essayer:

gzcat mycontent.DAT.Gz | wc -c
gzip -dc mycontent.DAT.Gz | wc -c
5
Ole Tange

gzip -l n'a pas fonctionné pour moi, juste git -1 ... mais ceci a:

unzip -l file.Zip
1
grosser

Je trouve tous les sites sur le Web, et ne résous pas le problème de la taille de fichier lorsque la taille du fichier est supérieure à 4 Go.

ma solution est la suivante :

 
 [Oracle @ base tmp] $ timeout --signal = SIGINT 1s tar -tvf Oracle.20180303.030001.dmp.tar.gz 
 -Rw-r - r-- Oracle/oinstall 111828 2018-03-03 03:05 Oracle.20180303.030001.log 
 -Rw-r ----- Oracle/oinstall 6666911744 2018-03-03 03:05 Oracle.20180303.030001.dmp 

pour obtenir la taille totale du fichier gz:

 [Oracle @ base tmp] $ echo $ (délai dépassé --signal = SIGINT 1s tar -tvf Oracle.20180303.030001.dmp.tar.gz | awk '{print $ 3}') | grep -o '[[: digit:]] *' | awk '{sum + = 1}} FIN {print sum}' 
 6667023572 
0
RaZieRSarE