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?
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
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
gzip -l n'a pas fonctionné pour moi, juste git -1 ... mais ceci a:
unzip -l file.Zip
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