Pular para o conteúdo
Todos os conceitos

Pacotes tar e gzip

O tar junta vários arquivos num só, o gzip comprime um arquivo; .tar.gz é os dois, e o comando file diz o que cada arquivo é.

Duas ferramentas antigas fazem trabalhos diferentes e quase sempre andam juntas:

  • o tar junta uma pasta inteira (arquivos, subpastas, datas, permissões) num arquivo só, sem comprimir nada. É o fardo amarrado;
  • o gzip comprime um arquivo, de qualquer tipo. É o fardo prensado.

Por isso o pacote comum no Linux é .tar.gz (ou .tgz): primeiro o tar junta, depois o gzip comprime. Para abrir, o caminho é o inverso, e o tar faz as duas coisas de uma vez:

$ tar -tzf colheita.tar.gz
colheita/
colheita/uvas.txt
$ tar -xzf colheita.tar.gz
$ ls
colheita  colheita.tar.gz

As letras: x extrai (extract), t só lista, c cria, z passa pelo gzip, v mostra os detalhes e f avisa que o próximo argumento é o arquivo. Sem o z, tar -xf abre um tar que não está comprimido.

O gzip sozinho: gzip -dc arquivo > saida descomprime (-d) e escreve o resultado na tela (-c), que o > desvia para um arquivo novo. O gunzip arquivo.gz faz o mesmo, mas só aceita nomes que terminam em .gz.

Quando o nome mente. A extensão é só parte do nome. Para saber o que um arquivo é de verdade, pergunte ao file, que lê os primeiros bytes (veja o conceito Assinatura de arquivo):

$ file colheita.tar.gz foto.png dados
colheita.tar.gz: gzip compressed data
foto.png:        ASCII text
dados:           POSIX tar archive

Um arquivo pode vir embrulhado em várias camadas. O método é sempre o mesmo: perguntar ao file, desfazer a camada que ele aponta, gravar o resultado num arquivo novo e perguntar ao file de novo.

O file diz Desfaça com
gzip compressed data gzip -dc entrada > saida
POSIX tar archive tar -xf entrada
ASCII text, só letras, números, + e /, às vezes = no fim base64 -d < entrada > saida
colheita/ tar junta colheita.tar gzip comprime colheita.tar.gz o file vê a camada de fora gzip compressed data tar -xzf colheita.tar.gz desfaz as duas camadas, na ordem inversa
Num .tar.gz, o tar primeiro amarra os arquivos num fardo e o gzip depois prensa o fardo; tar -xzf desfaz os dois na ordem inversa, e o file diz qual camada está por fora.

No macOS, tar, gzip -dc, file e base64 -d funcionam igual (em versões antigas do macOS, o base64 usa -D no lugar de -d). Em Python, os módulos tarfile, gzip e base64 desfazem cada camada.

Aparece nestes desafios