Empacotamento e compactação de arquivos

LinuxBeginner
Pratique Agora

Introdução

O empacotamento e a compactação resolvem problemas relacionados, mas diferentes. Um arquivo compactado combina uma árvore de diretórios em um único fluxo de dados, preservando os nomes e a estrutura. A compactação representa os dados de forma mais compacta. Um arquivo .tar é um arquivo empacotado; um arquivo .gz contém dados compactados com gzip; um arquivo .tar.gz é um arquivo tar compactado com gzip.

Você criará um pequeno projeto, gerará cada formato, inspecionará um arquivo antes da extração, restaurará o conteúdo em um diretório separado e comparará os dados restaurados com a origem. Esse fluxo de trabalho de inspeção, extração e verificação evita sobrescrever arquivos originais sem uma análise prévia.

Criar uma árvore de diretórios para preservar

Nesta etapa, você criará uma pequena árvore de origem e registrará o que deve ser preservado durante o empacotamento e a extração.

Crie os diretórios de configuração, anotações e dados:

cd /home/labex/project/archive-lab
mkdir -p source/{config,notes,data}

Grave três arquivos com conteúdos diferentes:

printf 'mode=training\nport=8080\n' > source/config/app.conf
printf 'Archive the complete project tree.\n' > source/notes/README.txt
printf 'alpha,beta,gamma\n1,2,3\n' > source/data/sample.csv

Use find para inspecionar os arquivos regulares exibindo caminhos relativos ao diretório de origem:

find source -type f -printf '%P\n' | sort

Criar e inspecionar um arquivo tar

Nesta etapa, você empacotará a árvore de origem sem compactação e inspecionará os nomes dos arquivos contidos nela.

As principais letras de operação do tar são c para criar, t para listar, x para extrair e f para indicar o nome do arquivo. Use -C para alterar o diretório de trabalho do tar antes de adicionar source. Isso evita armazenar um caminho absoluto longo:

cd /home/labex/project/archive-lab
tar -cf project.tar -C /home/labex/project/archive-lab source

A árvore de origem continua existindo, porque a criação do arquivo apenas lê seu conteúdo, sem movê-lo. Inspecione o arquivo e um dos arquivos originais:

ls -lh project.tar
ls -l source/config/app.conf

Liste os arquivos contidos antes de extrair:

tar -tf project.tar > tar-members.txt
cat tar-members.txt

Cada item deve começar com source/ e não deve haver uma / inicial. Nomes relativos tornam a restauração mais segura e portátil.

Extrair com segurança e comparar o resultado

Nesta etapa, você extrairá o conteúdo para um destino vazio, em vez de extraí-lo sobre a origem, e depois comparará as duas árvores.

Crie um diretório de restauração e use -C para definir o destino da extração:

cd /home/labex/project/archive-lab
mkdir tar-restore
tar -xf project.tar -C tar-restore

Inspecione os caminhos restaurados:

find tar-restore -type f -printf '%P\n' | sort

Faça uma comparação recursiva. O comando diff -r não exibe nada e termina com sucesso quando as árvores são iguais:

diff -r source tar-restore/source
echo "tar restore matches source" > tar-restore-ok.txt
cat tar-restore-ok.txt

Compactar e descompactar um arquivo com Gzip

Nesta etapa, você verá como o gzip se diferencia de um arquivo empacotado, operando sobre um único arquivo regular.

Copie um arquivo para manter a árvore de origem intacta e compacte a cópia:

cd /home/labex/project/archive-lab
cp source/data/sample.csv sample-copy.csv
gzip sample-copy.csv

Por padrão, o gzip substitui a entrada por sample-copy.csv.gz:

ls -lh sample-copy.csv.gz
file sample-copy.csv.gz

Descompacte o arquivo e compare seu conteúdo com o original:

gunzip sample-copy.csv.gz
cmp source/data/sample.csv sample-copy.csv
echo "gzip round trip matches" > gzip-round-trip-ok.txt
cat gzip-round-trip-ok.txt

O Gzip não empacota uma árvore de diretórios por conta própria; o tar fornece essa estrutura.

Criar e restaurar um arquivo tar compactado

Nesta etapa, você combinará o empacotamento com tar e a compactação com gzip. A opção z instrui o tar a passar os dados do arquivo pelo gzip.

Crie project.tar.gz e inspecione-o usando as opções correspondentes -tzf:

cd /home/labex/project/archive-lab
tar -czf project.tar.gz -C /home/labex/project/archive-lab source
tar -tzf project.tar.gz > targz-members.txt
cat targz-members.txt

Extraia o conteúdo para um destino separado e verifique a árvore:

mkdir targz-restore
tar -xzf project.tar.gz -C targz-restore
diff -r source targz-restore/source
echo "tar.gz restore matches source" > targz-restore-ok.txt
cat targz-restore-ok.txt

As extensões comunicam o formato às pessoas e às ferramentas: .tar.gz indica claramente um arquivo tar compactado com gzip.

Trocar o projeto como um arquivo Zip

Nesta etapa, você criará e inspecionará um arquivo Zip, um formato comum no Linux, no macOS e no Windows.

O comando zip -r adiciona recursivamente uma árvore de diretórios. Execute-o a partir da raiz do laboratório para que os caminhos armazenados comecem com source/:

cd /home/labex/project/archive-lab
zip -r project.zip source

Liste os arquivos contidos sem extrair:

unzip -l project.zip

Use -d para escolher um destino separado e compare o resultado:

unzip -q project.zip -d zip-restore
diff -r source zip-restore/source
echo "zip restore matches source" > zip-restore-ok.txt
cat zip-restore-ok.txt

Resumo

Você separou o empacotamento da compactação, criou e listou arquivos tar, concluiu um ciclo de compactação e descompactação com gzip, combinou as duas operações em .tar.gz e transferiu a mesma árvore usando Zip. O mais importante é que você restaurou o conteúdo em diretórios separados e comparou os dados, em vez de presumir que criar o arquivo empacotado seria suficiente.