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.