Depois que um arquivo é compactado, é possível consultá-lo rapidamente para dizer qual é o tamanho do arquivo descompactado (sem descompactá-lo), especialmente nos casos em que o arquivo descompactado tem mais de 4 GB.
De acordo com a RFC https://tools.ietf.org/html/rfc1952#page-5, você pode consultar os últimos 4 bytes do arquivo, mas se o arquivo não compactado for> 4 GB, o valor representa apenas ouncompressed value modulo 2^32
Esse valor também pode ser recuperado executando gunzip -l foo.gz
, no entanto, a coluna "descompactada" apenas contém uncompressed value modulo 2^32
novamente, presumivelmente enquanto lê o rodapé, conforme descrito acima.
Eu estava me perguntando se existe uma maneira de obter o tamanho do arquivo descompactado sem precisar descompactá-lo primeiro, isso seria especialmente útil no caso em que os arquivos compactados com gzip contêm 50 GB + de dados e levaria um tempo para descomprimir usando métodos como gzcat foo.gz | wc -c
EDIT: A limitação de 4 GB é reconhecida abertamente na man
página do gzip
utilitário incluído no 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.
fonte
gzip
deve ser mais antigo que muitos usuários nesta comunidade!gzip
saiu em 1992. Eu ficaria surpreso se houvesse muitos jovens de 23 anos vagando por aqui. Tenho certeza de que existem alguns, mas pelo que posso dizer, a idade média é de cerca de 30 a 35 anos.xz
qual não há essa limitação. O GNU está mudando paraxz
.xz
que 'resolveria' esse problema.Respostas:
Eu acredito que a maneira mais rápida é modificar
gzip
para que o teste no modo detalhado produza o número de bytes descompactados; no meu sistema, com um arquivo de 7761108684 bytes, receboPara modificar o gzip (1.6, conforme disponível no Debian), o patch é o seguinte:
fonte
-t
já está otimizado nesse sentido? A melhoria é pequena o suficiente para parecer que você economizou apenas o tempo de saída.gzip
; Eu apenas corrogzip
nos arquivos compactados, que não os compactam novamente, apenas os verifica. (O adesivo é um rápido e suja prova-de-conceito, é necessário mais algumas alterações de trabalho comgunzip
.)FCOMMENT
campo. Dessa forma, os usuários podem consultar um intervalo de bytes para recuperar esses dados. Isso seria útil no meu caso, especialmente para itens armazenados no Amazon S3Se você precisar do tamanho de um arquivo compactado ou de um conjunto de arquivos, sua melhor aposta é usar
tar -z
ou, emtar -j
vez degzip
,tar
incluir o tamanho do arquivo não compactado. Uselesspipe
para espiar a lista de arquivos:Se
less
estiver configurado para usarlesspipe
:Basta ter em mente que pode demorar muito tempo. No entanto, seu sistema permanece responsivo, o que permite eliminar o processo de descompressão.
Outra abordagem seria registrar a taxa compactada e consultar o arquivo [text]:
Requer computação para encontrar o tamanho real do arquivo.
Você também pode fazer o mesmo com
tar
, que é de fato o que faço com backups de grande porte, pois impede a execução de todo o processo de descompactação para obter apenas um tamanho ou nome de arquivo, por exemplo.fonte
tar
você, o tamanho do arquivo original é registrado no arquivo morto. Eu não tenho certezazip
se comporta de maneira diferente, por outro lado.wc -c
comando.Sobre o quê
fonte
Isso levará muito tempo, mas fornecerá o tamanho final em bytes.
fonte