Como obtenho um tamanho de arquivo (tamanho de arquivo original) dentro de .tar.gz sem descompactá-lo?

2

Eu faço myfile.txt para o arquivo zip com o comando abaixo, existe uma maneira de obter o tamanho do arquivo original 'myfile.txt' sem descompactá-lo.

tar -czf myfile.tar.gz myfile.txt
    
por αғsнιη 22.04.2017 / 05:29

3 respostas

3

Para obter o tamanho descompactado de um arquivo ZIP, podemos emitir gzip com a opção --list ou -l

gzip -l mytext.txt.tar.gz

Isso gerará uma saída semelhante a esta

gzip -l mytext.txt.tar.gz
         compressed        uncompressed  ratio uncompressed_name
               1475                4608  68.4% mytext.txt.tar

Para ter o tamanho do arquivo compactado, o tamanho não compactado e a taxa de compactação.

    
por Takkat 22.04.2017 / 10:03
1

Você pode listar o conteúdo (incluindo tamanhos de arquivo originais) do arquivo tar usando:

tar -vtf myfile.tar.gz

Se você quiser apenas myfile.txt :

tar -vtf myfile.tar.gz myfile.txt

Isso só funciona se você adicionar o caminho completo do arquivo, caso contrário, use:

tar -vtf myfile.tar.gz | grep myfile.txt

Observe que o tar terá que descompactar o arquivo para obter as informações do arquivo. No entanto, ele esconderá isso de você.

Se você precisa especificamente de uma maneira de obter metadados sem ter que descompactar todo o arquivo, é melhor usar o zip para armazenar seus arquivos e diretórios. O Zip usa um 'diretório central' no final de um arquivo zip que armazena todos os metadados do arquivo.

    
por NZD 22.04.2017 / 05:39
0

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 }') | grep -o '[[:digit:]]*' | awk '{ sum +=  } END { print sum }'
    6667023572

real    0m1.029s
user    0m0.012s
sys     0m0.063s
    
por RaZieRSarE 08.03.2018 / 21:36