tar -xf archive.tar.gz extrai tar, tar.gz, tar.bz2, tar.xz e tar.zst — o tar moderno detecta a compressão pelo conteúdo do arquivo, sem precisar de nenhuma flag. O outro hábito que evita bagunça é olhar o que tem dentro de um arquivo desconhecido antes de extrair, porque um sem pasta raiz em comum espalha tudo pelo seu diretório atual.
1. Primeiro veja o que tem dentro
$ clai mostra o que tem dentro desse arquivo sem extrair→ tar -tf arch.tar.gz | head -4d/d/b/d/b/two-copy.txtd/a/
-t lista o conteúdo em vez de extrair. Se todos os caminhos compartilham uma pasta de nível superior, o arquivo está bem organizado. Se a listagem mostrar caminhos como ./file1, ./file2 sem pasta em comum, extrair vai espalhar tudo pelo seu diretório atual.
2. Extrair sem pensar no tipo de compressão
$ clai extrai esse arquivo→ tar -xf arch.tar.gz
O tar moderno do GNU detecta gzip, bzip2, xz e zstd pelo conteúdo do arquivo. As flags z, j e J só importam em versões antigas do tar e na hora de criar um arquivo. Um único comando cobre todos os formatos baseados em tar.
3. Extrair em uma pasta separada
$ clai extrai o arquivo para uma pasta chamada out→ mkdir -p out && tar -xf arch.tar.gz -C out
-C muda de diretório antes de extrair. É também a defesa contra a «bomba de arquivo» da seção 1: mesmo sem pasta em comum, a bagunça cai em out, não debaixo dos seus pés.
4. Extrair um único arquivo
$ clai extrai só o arquivo d/a/three.txt do pacote→ tar -xf arch.tar.gz d/a/three.txt
Informe o caminho exatamente como aparece na saída de tar -tf. Não tente adivinhar — copie da listagem.
5. Outros formatos
$ clai extrai esse zip para uma pasta chamada out→ unzip -d out archive.zip
O unzip recebe o diretório de saída com -d, não com -C. Para 7z é 7z x archive.7z -oout — sem espaço depois do -o, senão ele lê como nome de arquivo. Cada ferramenta inventou sua própria flag pra mesma ideia.
6. Buscar dentro sem extrair
$ clai procura a palavra error no arquivo sem extrair→ tar -xzOf logs.tar.gz | grep -n 'error' | head
-O manda o conteúdo dos arquivos para a saída padrão em vez de gravar no disco. Para um arquivo de logs de vários gigabytes, essa é a diferença entre fazer na hora e ter que achar 10 GB de espaço livre antes.
Pegadinhas
- A flag
ftem que vir por último no grupo.tar -xfztenta usarzcomo nome de arquivo. Escrevatar -xzfou simplesmentetar -xf. .tar.gze.tgzsão a mesma coisa. Assim como.tar.bz2e.tbz2. A extensão não decide nada — o tar olha o conteúdo.- Um arquivo com caminhos absolutos é perigoso. Se
tar -tfmostrar caminhos começando com/, extrair pode sobrescrever arquivos do sistema. Extraia esse tipo de arquivo só com-Cpara um diretório próprio, depois de conferir a listagem.
Perguntas relacionadas
Como vejo o tamanho dos arquivos dentro de um pacote? tar -tvf archive.tar.gz — v adiciona permissões, dono, tamanho e data.
Por que o unzip bagunça nomes com caracteres não ASCII? A codificação de nomes no zip nunca foi padronizada. unzip -O CP866 conserta arquivos vindos do Windows com nomes em cirílico.
Como extraio vários arquivos de uma vez? for f in *.tar.gz; do tar -xf "$f" -C "${f%.tar.gz}"; done, depois de criar os diretórios.
Veja também
- Compacte esta pasta e envie para o S3
- Limpe logs e backups antigos com uma frase
- Buscar e substituir em todos os arquivos de um projeto
O CliAI escreve o comando certo de extração para qualquer arquivo que você jogar pra ele, com todas as flags. Instale em uma linha.