Descubra o tamanho de um arquivo .tar.gz no terminal sem desempacotar

4

Eu tenho um arquivo .tar.gz de 32GB e gostaria de saber o tamanho dos arquivos se eu descompactar este arquivo compactado. Gostaria de evitar desembalar o arquivo primeiro e depois usar, por exemplo du .

É também possível descobrir o tamanho dos arquivos contidos sem descompactar o arquivo compactado (em um sistema Linux e / ou MacOSX)?

Para outro arquivo, eu sei que ele também contém arquivos .tar.gz. Também é possível calcular o tamanho dos arquivos descompactados contidos em um arquivo? (por exemplo, definindo um nível para o qual o "desempacotamento" deve ser simulado?)

    
por Sven 19.12.2012 / 10:46

3 respostas

4

Claro. Basta usar -tv para listar o conteúdo com seus tamanhos. Por exemplo,

% tar -tvzf sometools2.tar.gz 
-rw-r--r-- madler/admin   3442 2005-02-27 21:40 pngdat.c
-rw-r--r-- madler/admin  24938 2005-02-27 21:39 infgen.c

Se você quiser adicionar os tamanhos (como du ), use awk :

% tar -tvzf sometools2.tar.gz|awk '{ s += $3 } END { print s }'
28380

Para um arquivo .tar.gz incorporado, você precisará fazer isso individualmente quando encontrá-los, enviando-os para stdout com -O :

% tar -tvzf imbed.tar.gz 
-rw-r--r-- madler/staff    505 2012-02-12 00:06 lucas.c
-rw-r--r-- madler/staff  27913 2005-03-20 11:10 lzwtry.c
-rw-r--r-- madler/staff   8314 2005-02-27 21:42 sometools2.tar.gz
% tar -xOzf imbed.tar.gz sometools2.tar.gz | tar -tvzf - | awk '{ s += $3 } END { print s }'
28380

Você pode escrever um script para encontrá-los na -tv output e depois extraí-los e até mesmo recursivamente. Vou deixar isso como um exercício para o leitor.

Note que estas opções são para o GNU tar, que é o que está no Linux e no Mac OS X. As opções para o BSD podem ser diferentes.

    
por 19.12.2012 / 15:58
0

Eu não sei como fazer algo assim no terminal (AFAIK não é possível). Mas a maioria das bibliotecas de programação para extração de arquivos também permite consultar informações de conteúdo (por exemplo, árvore, tamanho do conteúdo) sem extrair todo o conteúdo compactado.

Você pode criar uma ferramenta de linha de comando com qualquer linguagem de programação que atenda às suas necessidades e, em seguida, chamá-la na linha de comando.

    
por 19.12.2012 / 10:54
0

Primeiro, você deve saber que o sufixo .tar.gz significa que é um arquivo tar compactado. tar é apenas um meio de empacotar vários arquivos e diretórios em um único arquivo. Não possui nenhuma compactação por padrão. É aqui que entra gzip . É uma ferramenta para compactar um único arquivo. Portanto, o sufixo acima mencionado significa que é um pacote compactado de arquivos e / ou diretórios.

Se você quiser ver as taxas de compactação de cada arquivo em um pacote tar compactado, consulte a resposta de Mark Adler .

Se você estiver interessado apenas em todo o arquivo compactado (ou bundle), a maneira correta de determinar o tamanho descompactado é:

gunzip -l ${file}

Exemplo de saída:

$ gunzip -l syslog.1.gz
     compressed        uncompressed  ratio uncompressed_name
        4465670            33295551  86.6% syslog.1

Os números compactados e não compactados mostram bytes. Ergo meu arquivo syslog.1 seria de cerca de 32 MB descompactado.

    
por 19.09.2018 / 08:35