Obtenha o tamanho extraído do tgz antes de extrair

4

É possível obter o tamanho que um tgz ocupará quando for extraído, mas sem extraí-lo? Eu basicamente quero

tar tzf file.tgz
com tamanhos ao lado deles. Eu estou realmente procurando um total, portanto, uma solução que ofereça tamanho total, mas não tamanhos de arquivo específicos, funcionaria.     
por Steve Armstrong 19.05.2009 / 17:44

4 respostas

13

Se for compactado usando a compactação gzip, você poderá fazer algo como:

gunzip -l filename.tar.gz

Como um tar não é compactado, isso deve fornecer as informações necessárias.

    
por 19.05.2009 / 17:49
1

Hm eu preferiria algo como:

tar vtzf somefile.tar.gz |awk '{SUM += $3} END {print SUM}'
    
por 19.05.2009 / 17:53
0
zcat file.tgz | wc -c

Fornecerá o número de caracteres utilizados pelo arquivo .tar descompactado, que estará bem próximo da correção.

    
por 19.05.2009 / 17:48
-1

Estou a encontrar todos os sites na Web e não resolvo este problema quando o tamanho do ficheiro for superior a 4 GB.

primeiro, o que é mais rápido?

[oracle@base tmp]$ time zcat oracle.20180303.030001.dmp.tar.gz | wc -c
    6667028480

    real    0m45.761s
    user    0m43.203s
    sys     0m5.185s
[oracle@base tmp]$ time gzip -dc oracle.20180303.030001.dmp.tar.gz | wc -c
    6667028480

    real    0m45.335s
    user    0m42.781s
    sys     0m5.153s
[oracle@base tmp]$ time 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

    real    0m46.669s
    user    0m44.347s
    sys     0m4.981s

definitivamente, tar -xvf é o mais rápido, mas ¿Como cancelar execuções depois de obter o cabeçalho?

minha solução é esta :


[oracle@base tmp]$  time echo $(timeout --signal=SIGINT 1s tar -tvf oracle.20180303.030001.dmp.tar.gz | awk '{print $3}') | grep -o '[[:digit:]]*' | awk '{ sum += $1 } END { print sum }'
    6667023572
    
por 08.03.2018 / 21:47

Tags