Una vez que se comprime un archivo, ¿hay alguna forma de consultarlo rápidamente para decir cuál es el tamaño del archivo sin comprimir (sin descomprimirlo), especialmente en los casos en que el archivo sin comprimir tiene un tamaño> 4 GB.
De acuerdo con la RFC https://tools.ietf.org/html/rfc1952#page-5 , puede consultar los últimos 4 bytes del archivo, pero si el archivo sin comprimir era> 4 GB, entonces el valor solo representa eluncompressed value modulo 2^32
Este valor también se puede recuperar ejecutando gunzip -l foo.gz
, sin embargo, la columna "sin comprimir" solo contiene uncompressed value modulo 2^32
nuevamente, presumiblemente porque está leyendo el pie de página como se describe anteriormente.
Me preguntaba si hay una manera de obtener el tamaño del archivo sin comprimir sin tener que descomprimirlo primero, esto sería especialmente útil en el caso de que los archivos comprimidos contengan más de 50 GB de datos y tomaría un tiempo descomprimirlos usando métodos como gzcat foo.gz | wc -c
EDITAR: la limitación de 4 GB se reconoce abiertamente en la man
página de la gzip
utilidad incluida con 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.
fuente
gzip
debe ser mayor que muchos usuarios en esta comunidad!gzip
salió en 1992. Me sorprendería si hubiera muchos jóvenes de 23 años deambulando por aquí. Estoy seguro de que hay algunos, pero por lo que puedo decir, la edad promedio es de alrededor de 30-35.xz
que no tiene esa limitación. GNU está cambiando axz
.xz
que 'resolvería' este problema.Respuestas:
Creo que la forma más rápida es modificar
gzip
para que las pruebas en modo detallado generen la cantidad de bytes descomprimidos; en mi sistema, con un archivo de 7761108684 bytes, obtengoPara modificar gzip (1.6, como está disponible en Debian), el parche es el siguiente:
fuente
-t
ya está optimizado en ese sentido? La mejora es lo suficientemente pequeña como para que parezca que solo ha guardado el tiempo de salida.gzip
; Simplemente ejecutogzip
los archivos comprimidos, lo que no los vuelve a comprimir, solo los verifica. (El parche es una prueba de concepto rápida y sucia, necesita algunos cambios más para funcionargunzip
)FCOMMENT
campo. De esa forma, los usuarios podrían consultar un rango de bytes para recuperar esos datos. Esto sería útil en mi caso, especialmente para los artículos almacenados en Amazon S3Si necesita el tamaño de un archivo comprimido o conjunto de archivos, lo mejor es usar
tar -z
otar -j
en lugar degzip
quetar
incluye el tamaño de los archivos sin comprimir. Uselesspipe
para echar un vistazo a la lista de archivos:Si
less
está configurado para usarlesspipe
:Sin embargo, tenga en cuenta que puede llevar mucho tiempo. Sin embargo, su sistema sigue respondiendo, lo que le permite matar el proceso de descompresión.
Otro enfoque sería registrar la relación comprimida y consultar ese archivo [texto] en su lugar:
Sin embargo, requiere un cálculo para encontrar el tamaño real del archivo.
También podría hacer lo mismo
tar
, que de hecho es lo que hago con las copias de seguridad de gran tamaño, ya que impide ejecutar todo el proceso de descompresión para obtener solo un tamaño o nombre de archivo, por ejemplo.fuente
tar
usted tiene el tamaño del archivo original registrado en el archivo. No estoy seguro dezip
comportarse de manera diferente, por otro lado.wc -c
comando.Qué pasa
fuente
Esto llevará mucho tiempo, pero le dará el tamaño final en bytes.
fuente