Como posso obter o tamanho descompactado do arquivo gzip sem realmente descompactá-lo?

25

Encontre os detalhes do meu sistema operacional:

$ uname -a
AIX xxyy 1 6 000145364C00

Eu tentei o seguinte comando para obter o tamanho de um arquivo no arquivo gzip:

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

Não sei como interpretar o tamanho descompactado disso. Tamanho do arquivo compactado próximo a 4 GB.

Então, tentei esta opção para capturar dados corretos:

$ zcat mycontent.DAT.Gz | wc -c

Dá-me este erro:

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

Você pode me dizer como capturar esse valor do shell script sem descomprimir o arquivo de origem?

user238010
fonte
Você tem certeza da integridade do arquivo morto? Ele relata seu próprio tamanho compactado como ~ 1.7G. Se é realmente ~ 4GB, eu acho que há um problema.
terdon

Respostas:

26

Para responder ao título da pergunta:

Como posso obter o tamanho descompactado do arquivo gzip sem realmente descompactá-lo?

Como você obviamente sabe, a opção -l( --list) geralmente mostra o tamanho não compactado.
O que mostra não é calculado a partir dos dados, mas foi armazenado no cabeçalho como parte do arquivo compactado.

No seu caso, a -lopção não funciona por algum motivo.
Mas não é possível 'medir' o tamanho não compactado dos dados compactados brutos - simplesmente não há informações sobre mais nada nos dados compactados - o que não é surpreendente, pois o ponto de compactação é deixar de fora qualquer coisa que não seja necessária.

Você não precisa armazenar os dados descompactados no disco: zcat file.gz | wc -cé a abordagem correta - mas, como o @OleTange respondeu, zcatparece que não é você gzip.
A alternativa é usar as gzipopções -d( --decompress) e -c( --to-stdout), combinadas com a wcopção -c( --bytes):

gzip -dc file.gz | wc -c
Volker Siegel
fonte
13
A -lopção possui um erro para arquivos maiores que 4 GB: bugs.debian.org/cgi-bin/bugreport.cgi?bug=149775
Flimm
6

Você zcatnão é o GNU zcat, mas o Compress. Experimentar:

gzcat mycontent.DAT.Gz | wc -c
gzip -dc mycontent.DAT.Gz | wc -c
Ole Tange
fonte
Isso descompacta o arquivo de origem. Talvez seja o que o OP quer, mas essa não é a resposta para a pergunta.
14133 Marco Marco
Ah, isso explica por que ele estava procurando um arquivo que terminava em .Z
Hennes
0

O gzip -l não funcionou para mim, apenas o git -1 ... mas isso funcionou:

unzip -l file.zip
mais grosseiro
fonte
0

Estou encontrando todos os sites da Web e não resolvo esse problema com o tamanho de obter quando o tamanho do arquivo é maior que 4 GB.

minha solução é 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 obter o tamanho total do arquivo 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
RaZieRSarE
fonte
1
Essa seria uma resposta melhor se você explicasse que ele funciona apenas para tarballs e o limpasse (o tempo limite não é necessário e o grep).
Kbolino