Aprenda / Terminal e linha de comando

IntermediárioAula 14 de 1615 min0% da trilha

Compactando e arquivando: tar e zip

'Arquivar' e 'compactar' parecem sinônimos no dia a dia, mas são duas operações diferentes que o tar costuma fazer juntas.

No uso comum, "compactar um arquivo" vira uma expressão só — mas por baixo dela existem duas operações separadas. Arquivar significa juntar vários arquivos (e pastas) num único arquivo, sem necessariamente reduzir o tamanho de nada. Compactar significa reduzir o tamanho dos dados, aplicando um algoritmo de compressão. O tar, a ferramenta mais tradicional do mundo Unix pra isso, historicamente faz as duas coisas em sequência.

tar -czvf — criando um arquivo compactado

terminal
tar -czvf projeto.tar.gz projeto/

Cada letra da flag -czvf tem um papel específico:

as 4 flags de tar -czvf
c → create (criar um novo arquivo tar)
z → compactar usando gzip (é essa letra que dá a extensão .gz)
v → verbose (mostrar cada arquivo processado na tela, como no exemplo acima)
f → o próximo argumento é o NOME do arquivo de saída (aqui, projeto.tar.gz)

O resultado, projeto.tar.gz, junta todo o conteúdo da pasta projeto/ num único arquivo e reduz o tamanho total via compressão gzip — as duas operações (arquivar + compactar) aconteceram numa única chamada de comando.

tar -xzvf — extraindo

terminal
tar -xzvf projeto.tar.gz

Só o c vira x (extract) — o resto das flags é igual, porque o z continua dizendo "isso está compactado com gzip" e o f continua apontando pro nome do arquivo, agora de entrada em vez de saída.

zip e unzip — a alternativa mais comum fora do Unix

O formato .zip é mais popular fora do mundo Unix — é o padrão nativo do Windows, por exemplo — e no terminal os comandos correspondentes são bem mais diretos que o tar, sem combinação de flags cifradas:

terminal
zip -r projeto.zip projeto/

Assim como cp e rm, o zip também precisa de -r pra entrar recursivamente numa pasta — sem essa flag, ele reclamaria que projeto/ é uma pasta e não um arquivo.

terminal
unzip projeto.zip

unzip não precisa de flag nenhuma pro caso comum — ele já sabe extrair pastas e arquivos preservando a estrutura original.

Quando usar qual

Em servidores Linux e em scripts de automação, tar.gz é o padrão histórico e mais esperado. .zip aparece mais quando o arquivo vai circular também entre pessoas usando Windows, ou quando alguém precisa abrir o conteúdo clicando duas vezes numa interface gráfica sem instalar nada extra.

Exercício

Você precisa enviar a pasta relatorios/ pra um colega que vai abrir no Windows, sem instalar nenhum programa extra. Depois, ele te devolve um arquivo respostas.tar.gz gerado num servidor Linux. Quais os dois comandos, um pra cada situação?

Quiz rápido

Na prática, qual a diferença entre 'arquivar' e 'compactar', que o comando tar costuma fazer junto?
Em 'tar -czvf projeto.tar.gz projeto/', o que a flag 'f' especifica exatamente?