Descompacte arquivos TAR: Guia completo para .tar.gz e .tar.bz2

Os arquivos tar são essencialmente recipientes compactados para múltiplos arquivos e diretórios. Frequentemente, você se deparará com eles ao utilizar distribuições Linux, como o Ubuntu, ou mesmo ao manusear o terminal no macOS. Este guia detalha como descompactar – ou extrair – o conteúdo de um arquivo tar, também conhecido como tarball.

Desvendando os Formatos .tar.gz e .tar.bz2

Os arquivos que ostentam as extensões .tar.gz ou .tar.bz2 são, na realidade, arquivos compactados. Um arquivo com apenas a extensão .tar significa que ele não foi compactado, mas esses casos são raros.

A parte “.tar” da extensão indica que se trata de um “arquivo em fita” (tape archive), originando o termo “arquivo tar”. O formato remonta a 1979, quando o comando tar foi criado para permitir que administradores de sistemas arquivassem dados em fitas magnéticas. Surpreendentemente, quatro décadas depois, ainda utilizamos o comando tar para extrair arquivos em nossos discos rígidos. E, em algum canto do mundo, provavelmente alguém ainda o utiliza com fitas.

Os sufixos .gz ou .bz2 sinalizam que o arquivo foi submetido a compressão, utilizando, respectivamente, os algoritmos gzip ou bzip2. O comando tar é eficaz com ambos os tipos de compressão, então o método de compactação não é um problema – ele deve estar disponível em qualquer sistema com um shell Bash. O essencial é utilizar as opções corretas na linha de comando.

O Processo de Extração de Arquivos Tar

Imagine que você fez o download de dois arquivos de partituras. Um se chama ukulele_songs.tar.gz, e o outro, guitar_songs.tar.bz2. Ambos se encontram no diretório Downloads.

Vamos começar extraindo as partituras do ukulele:

tar -xvzf ukulele_songs.tar.gz

À medida que os arquivos são extraídos, seus nomes são listados na tela do terminal.

As opções da linha de comando que foram utilizadas são:

  • -x: Instrução para extrair os arquivos contidos no arquivo tar.
  • -v: Modo verbose, que lista os arquivos conforme são extraídos.
  • -z: Descompressão gzip, utilizando o algoritmo gzip.
  • -f: Especificação do arquivo tar, informando ao tar qual arquivo deve ser processado. Esta opção requer o nome do arquivo tar.

Ao listar o conteúdo do diretório com o comando ‘ls’, você notará a criação de um diretório chamado “Ukulele Songs”. Os arquivos extraídos se encontram dentro deste diretório. O diretório foi incluído no arquivo tar original.

Agora, vamos extrair as músicas de guitarra. Usaremos um comando semelhante ao anterior, mas com uma alteração crucial. A extensão .bz2 indica que a compressão foi feita com bzip2. Portanto, substituiremos a opção -z (gzip) pela opção -j (bzip2).

tar -xvjf guitar_songs.tar.bz2

Mais uma vez, os arquivos são listados à medida que são extraídos. Para ficar claro, as opções utilizadas com o arquivo .tar.bz2 foram:

  • -x: Extrai os arquivos do arquivo tar.
  • -v: Modo detalhado, lista os arquivos extraídos.
  • -j: Descompressão bzip2, utilizando o algoritmo bzip2.
  • -f: Especifica o arquivo tar que o comando deve processar.

Ao listar o conteúdo do diretório de downloads, você verá um novo diretório chamado “Guitar Songs”.

Definindo o Destino da Extração

Para direcionar a extração para um local diferente do diretório atual, utilize a opção -C (diretório especificado), informando o caminho desejado.

tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/

Ao verificar o diretório Documentos/Músicas, você encontrará o diretório “Guitar Songs” recém-criado.

É importante notar que o diretório de destino deve existir previamente, pois o comando tar não o cria. Se você precisar criar o diretório e extrair os arquivos em um único comando, utilize o seguinte:

mkdir -p ~/Documents/Songs/Downloaded && tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/Downloaded/

A opção -p (parentes) do comando mkdir assegura que todos os diretórios pais necessários sejam criados, garantindo a existência do diretório de destino.

Visualizando o Conteúdo Antes da Extração

Em vez de extrair arquivos sem ter certeza do que eles contêm, você pode inspecionar o conteúdo de um arquivo tar previamente. Use a opção -t (list) para visualizar o conteúdo. Normalmente, é prático direcionar a saída para o comando ‘less’.

tar -tf ukulele_songs.tar.gz | less

Repare que não é necessário usar a opção -z para listar os arquivos. Essa opção só é requerida durante a extração de arquivos .tar.gz. Da mesma forma, a opção -j não é necessária para listar arquivos em um arquivo tar.bz2.

Ao percorrer a saída, você verá que todo o conteúdo do arquivo tar está dentro de um diretório chamado “Ukulele Songs”, que por sua vez contém arquivos e outros diretórios.

É possível observar que o diretório “Ukulele Songs” contém diretórios adicionais, como “Random Songs”, “Ramones” e “Possibles”.

Para extrair todos os arquivos de um diretório específico dentro de um arquivo tar, utilize o seguinte comando. O caminho deve ser colocado entre aspas devido à presença de espaços.

tar -xvzf ukulele_songs.tar.gz "Ukulele Songs/Ramones/"

Para extrair um único arquivo, especifique o caminho completo e o nome do arquivo.

tar -xvzf ukulele_songs.tar.gz "Ukulele Songs/023 - My Babe.odt"

A extração de uma seleção de arquivos é possível através de curingas, onde * representa qualquer sequência de caracteres e ? representa um caractere único. O uso de curingas exige a inclusão da opção –wildcards.

tar -xvz --wildcards -f ukulele_songs.tar.gz "Ukulele Songs/Possibles/B*"

Extração sem Preservar a Estrutura de Diretórios

Caso não seja necessário recriar a estrutura de diretórios do arquivo tar no seu disco, a opção –strip-components pode ser útil. Essa opção requer um parâmetro numérico, que indica quantos níveis de diretórios devem ser desconsiderados. Os arquivos desses diretórios ignorados ainda são extraídos, mas sem a hierarquia original.

Se especificarmos –strip-components=1 para o nosso arquivo tar de exemplo, o diretório de nível mais alto “Ukulele Songs” não será criado no disco. Os arquivos e diretórios que seriam extraídos para ele, serão extraídos diretamente no diretório de destino.

tar -xvzf ukulele_songs.tar.gz --strip-components=1

Considerando que existem apenas dois níveis de aninhamento em nosso arquivo tar, ao usar –strip-components=2, todos os arquivos serão extraídos diretamente no diretório de destino, sem a criação de nenhum diretório.

tar -xvzf ukulele_songs.tar.gz --strip-components=2

Ao consultar a página man do Linux, é possível perceber que o comando tar poderia disputar o título de “comando com mais opções de linha de comando”. Felizmente, para extrair arquivos de .tar.gz e .tar.bz2 com o controle desejado, é necessário memorizar apenas algumas opções.