Eu tenho um grande bzip2
arquivo compactado e preciso verificar seu tamanho descompactado sem realmente descompactá-lo (semelhante a gzip -l file.gz
ou xz -l file.xz
). Como isso pode ser feito usando bzip2
?
Eu tenho um grande bzip2
arquivo compactado e preciso verificar seu tamanho descompactado sem realmente descompactá-lo (semelhante a gzip -l file.gz
ou xz -l file.xz
). Como isso pode ser feito usando bzip2
?
Como mencionado nos comentários e na resposta vinculada, a única maneira confiável é descompactar (em um pipe) e fazer uma contagem de bytes.
Como alternativa, encontre alguma ferramenta que faça isso sem o tubo supérfluo (pode ser um pouco mais eficiente):
Isso também se aplica ao gzip e outros formatos. Embora
gzip -l file.gz
imprima um tamanho, pode ser um resultado errado. Quando o arquivo passa de um determinado tamanho, você obtém coisas como:Ou se o arquivo foi concatenado ou simplesmente não foi criado corretamente:
O tamanho não corresponde, então isso não é confiável de forma alguma.
Às vezes você pode trapacear, dependendo do que está dentro do arquivo. Por exemplo, se for uma imagem compactada do sistema de arquivos, com um cabeçalho de metadados no início, você pode descompactar apenas esse cabeçalho e ler o tamanho total do sistema de arquivos a partir dele.
Então, extraindo uma pequena parte, você aprende que são 315.904 blocos de 4.096 bytes, o que resulta em 1.234 MiB.
Não há garantia de que seria o tamanho real do arquivo compactado (pode ser maior ou menor), mas assumindo que não há coisas estranhas, é mais confiável do que
gzip -l
em qualquer caso.Por último, mas não menos importante, se esses arquivos forem criados por você, basta registrar o tamanho.
Essa pergunta já foi respondida aqui . Colado abaixo:
Conforme observado por outros, o bzip2 não fornece muitas informações. Mas essa técnica funciona - você terá que descompactar o arquivo, mas não precisará gravar os dados descompactados no disco, o que pode ser uma solução "boa o suficiente" para você:
Você pode canalizar essa saída para outra coisa para fornecer uma forma legível por humanos: