Gerador de comando tar
Monte comandos tar (criar, extrair, listar) com compressão (gz/bz2/xz/zst), preservar permissões e exclusões.
tar em profundidade: modos, filtros de compressão e backups reproduzíveis
O comando tar — abreviação de tape archive — foi escrito por Jean-loup Gailly em 1979 para o Unix v7, originalmente para serializar sistemas de arquivos em fitas magnéticas. Quase meio século depois, ele segue como formato de empacotamento de fato de toda distribuição Linux, a camada que entrega cada imagem Docker, o formato em que o kernel Linux é distribuído e a base de praticamente todo backup noturno. Sobreviveu por causa do projeto: tar não comprime, apenas empacota. A compressão é colocada em cima por filtros intercambiáveis (gzip, bzip2, xz, zstd), e esse desacoplamento permite trocar o algoritmo sem mudar o formato.
Modos de operação e flags obrigatórias
Toda chamada do tar precisa de um modo e de um arquivo:
-c— cria um novo arquivo.-x— extrai de um arquivo existente.-t— lista (table of contents) sem extrair.-r— anexa arquivos a um tar não comprimido.-u— anexa apenas arquivos mais novos do que a entrada correspondente.-f <arq>— caminho do arquivo. Sempre obrigatório, mesmo em pipe (use-para stdin/stdout).
Filtros de compressão: gzip, bzip2, xz, zstd
Filtros são flags curtas que canalizam o tar por um compressor:
-z gzip (.tar.gz / .tgz) rápido, compressão modesta
-j bzip2 (.tar.bz2) mais lento, melhor que gzip
-J xz (.tar.xz) lento, ~30% menor que gzip
--zstd (.tar.zst) ponto ótimo moderno: ~xz, 5-10x mais rápido
--lz4 (.tar.lz4) muito rápido, baixa compressão (HPC scratch)
--lzma (.tar.lzma) antecessor legado do xz
Em uma árvore de código-fonte de 1 GB, espere aproximadamente: gzip ~300 MB / 4 s, bzip2 ~230 MB / 25 s, xz ~180 MB / 90 s, zstd -19 ~185 MB / 12 s. O zstd é o padrão moderno tanto para backups quanto para camadas de containers.
Modificadores frequentes
-v— verbose, imprime cada entrada na stderr.-C <dir>— muda de diretório antes do próximo argumento.--exclude=<glob>— ignora caminhos que casam (repetível, ou via--exclude-from=arquivo).--strip-components=N— descarta N componentes iniciais do caminho ao extrair.-p/--preserve-permissions— mantém modos UNIX; padrão só quando rodando como root.--owner=0 --group=0 --numeric-owner— força UID/GID para gerar archives reproduzíveis.--mtime='@0'+--sort=name— saída bit-a-bit reproduzível (junto com os flags anteriores).-S— trata arquivos esparsos com eficiência (útil para imagens de VM).
Exemplos comentados
# Cria backup com gzip
tar -czvf backup.tar.gz pasta/
# Extrai em qualquer lugar
tar -xzvf backup.tar.gz
# Cria excluindo diretórios pesados
tar --exclude='node_modules' --exclude='.git' \
-czf src.tgz src/
# Confere o conteúdo sem extrair
tar -tzvf backup.tar.gz | head
# Extrai removendo o diretório raiz
tar -xJf big.tar.xz --strip-components=1 -C /tmp
# Archive reproduzível (idêntico byte a byte entre runs)
tar --sort=name --owner=0 --group=0 --numeric-owner \
--mtime='@0' -cf src.tar src/
# Envia via SSH sem arquivo temporário
tar -czf - data/ | ssh host 'tar -xzf - -C /backup'
Pegadinhas: GNU vs BSD tar, caminhos e segurança
GNU vs BSD tar. O macOS vem com BSD tar (libarchive), que não tem algumas opções longas do GNU e usa -s para substituição no lugar de --transform. Scripts que precisam rodar nos dois devem se ater a flags curtas e evitar extensões só do GNU como --anchored.
Caminhos absolutos. O tar moderno remove a barra inicial por padrão; só use --absolute-names se souber o que está fazendo — um archive com caminhos absolutos pode sobrescrever arquivos do sistema na extração.
Path traversal. Tar antigo e código ingênuo de tarfile em Python eram vulneráveis a entradas tipo ../../etc/passwd. O tar moderno rejeita por padrão; se você escreve seu próprio extrator, valide cada entrada antes de gravar.
Windows. O Windows 11 24H2 traz tar nativo; versões antigas precisam de 7-Zip, WSL ou Git Bash. .tar.gz sobrevive ao round-trip, mas cuidado com permissões UNIX e symlinks — o NTFS suporta os dois apenas parcialmente.
FAQ
É seguro compartilhar .tar.gz? O formato é seguro; o que importa é a confiança no produtor. Verifique com assinatura destacada (gpg --verify) ou um checksum publicado em um canal diferente.
Consigo abrir .tar.gz no Windows? Sim — 7-Zip, WinRAR, o tar nativo do Windows 11 ou o WSL resolvem. A dupla extração (.tar dentro do .gz) era uma chatice do 7-Zip antigo; versões modernas desembrulham os dois em um clique.
Qual o melhor compressor para backups grandes? zstd --long=27 -19 — aproximadamente o mesmo tamanho final do xz em árvores grandes, mas 5-10x mais rápido para comprimir e 3-5x mais rápido para descomprimir.
Como adiciono um arquivo a um .tar.gz? Não dá — archives comprimidos com gzip não permitem seek. Ou recrie o archive, ou use .tar puro com -r e recompacte no final.
Por que o segundo tar saiu com tamanho diferente, mesmo sem mudanças? A ordem de inodes e os timestamps de metadados variam entre execuções. Para builds reproduzíveis use --sort=name --mtime='@0' --owner=0 --group=0 --numeric-owner.
Ferramentas Relacionadas
Gerador de Comando iptables
Monta uma regra iptables para INPUT/OUTPUT/FORWARD: protocolo, porta, ação (ACCEPT, DROP, REJECT).
Gerador de find
Construa comandos find por nome, tipo, tamanho, idade e -exec/-delete. Útil para varreduras em scripts shell.
Gerador de comando AWS S3
Monta comandos aws s3 (cp, sync, ls, rm) com bucket, caminho, ACL, recursividade, classe de armazenamento e perfil.