¿Cómo puedo obtener el tamaño sin comprimir del archivo gzip sin descomprimirlo realmente?


25

Por favor encuentre los detalles de mi sistema operativo:

$ uname -a
AIX xxyy 1 6 000145364C00

He intentado el siguiente comando para obtener el tamaño de un archivo en el archivo gzip:

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

No estoy seguro de cómo interpretar el tamaño descomprimido de esto. Tamaño de archivo comprimido cercano a 4 GB.

Entonces, probé esta opción para capturar datos correctos:

$ zcat mycontent.DAT.Gz | wc -c

Me da este error:

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

¿Puede decirme cómo capturar este valor del script de shell sin descomprimir el archivo fuente?


¿Estás seguro de la integridad del archivo? Informa su propio tamaño comprimido como ~ 1.7G. Si es realmente ~ 4GB, supongo que hay un problema.
terdon

Respuestas:


26

Para responder el título de la pregunta:

¿Cómo puedo obtener el tamaño sin comprimir del archivo gzip sin descomprimirlo realmente?

Como obviamente sabe, la opción -l( --list) generalmente muestra el tamaño sin comprimir.
Lo que muestra no se calcula a partir de los datos, sino que se almacenó en el encabezado como parte del archivo comprimido.

En su caso, la -lopción no funciona por alguna razón.
Pero no es posible 'medir' el tamaño sin comprimir de los datos comprimidos sin procesar, simplemente no hay información sobre nada más en los datos comprimidos, lo cual no es sorprendente, ya que el punto de compresión es omitir todo lo que no sea necesario.

No es necesario que almacene los datos sin comprimir en el disco: zcat file.gz | wc -ces el enfoque correcto, pero como respondió @OleTange, zcatparece que no es el de gzip.
La alternativa es usar las gzipopciones -d( --decompress) y -c( --to-stdout), combinadas con la wcopción -c( --bytes):

gzip -dc file.gz | wc -c

13
La -lopción tiene un error para archivos de más de 4 GB: bugs.debian.org/cgi-bin/bugreport.cgi?bug=149775
Flimm

6

Tu zcatno es GNU zcat sino de compresa. Tratar:

gzcat mycontent.DAT.Gz | wc -c
gzip -dc mycontent.DAT.Gz | wc -c

Esto descomprime el archivo fuente. Tal vez es lo que quiere el OP, pero esta no es la respuesta a la pregunta.
Marco

Ah, eso explica por qué estaba buscando un archivo que terminara en .Z
Hennes


0

Estoy encontrando todos los sitios en la web, y no resuelvo este problema al obtener el tamaño cuando el tamaño del archivo es mayor de 4 GB.

mi solución es esta :

[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

para obtener el tamaño total del archivo gz:

[oracle @ base tmp] $ echo $ (timeout --signal = SIGINT 1s tar -tvf oracle.20180303.030001.dmp.tar.gz | awk '{print $ 3}') | grep -o '[[: dígito:]] *' | awk '{sum + = $ 1} END {print sum}'
    6667023572

1
Esta sería una mejor respuesta si explicara que solo funciona para tarballs y lo limpió (el tiempo de espera no es necesario, y tampoco lo es grep).
kbolino
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.