Linux / Comando unzip: listar, testar e extrair arquivos ZIP

O comando unzip lista, testa e extrai arquivos de um ZIP. Consulte os caminhos antes de extrair e use -d para escolher uma pasta de destino separada; -n evita substituir arquivos que já existem.

Sem um destino explícito, o programa extrai para o diretório atual e seus subdiretórios. -l mostra a lista, -t testa os dados comprimidos e -o permite sobrescrever sem perguntar. Escolher uma pasta vazia e conferir as entradas reduz conflitos, mas não transforma um ZIP desconhecido em conteúdo confiável.

Sintaxe básica e preparação

unzip [opções] arquivo.zip [-d diretório-de-destino]

Essa linha descreve a sintaxe, com nomes que devem ser substituídos pelos caminhos reais. Confira a implementação com unzip -v e as opções disponíveis com man unzip. Os exemplos usam o Info-ZIP UnZip; nomes com espaços devem ser colocados entre aspas.

Você precisa de um ZIP existente, permissão para lê-lo, permissão de escrita no destino e espaço para os dados descomprimidos. Execute os exemplos com arquivos próprios em uma pasta de trabalho. Para criar um pacote pequeno nessa pasta, sem nomes anteriores em conflito, execute mkdir project, depois printf 'hello\n' > project/readme.txt e, por fim, zip -r project.zip project/. Esse preparo requer também o programa zip, usado para criar arquivos ZIP.

Exemplos de listagem e extração

Consultar os arquivos do pacote

Verifique os nomes, os tamanhos descomprimidos e os caminhos antes de escrever arquivos no disco.

unzip -l project.zip

Com o pacote pequeno descrito acima, a lista inclui project/ e project/readme.txt. Datas, formatação e totais variam conforme o arquivo e a implementação. A listagem não testa integralmente os dados nem garante espaço suficiente: compare o tamanho descomprimido com a capacidade disponível no destino.

Extrair para um destino separado

Antes de executar, confirme que restore/ é realmente uma pasta vazia sob seu controle.

mkdir -p restore
unzip project.zip -d restore/

A opção -d mantém a hierarquia armazenada. Nesse exemplo, o arquivo ficará em restore/project/readme.txt, e o ZIP de entrada continuará existindo. O texto do arquivo deve ser hello seguido de uma quebra de linha; confira o conteúdo, não apenas o nome.

O comando mkdir -p restore aceita uma pasta que já existe e não a esvazia. Se ela já tiver conteúdo, escolha outro destino. Para exigir um nome novo, você pode usar mkdir restore && unzip project.zip -d restore/: nesse caso, uma falha no mkdir impede a extração seguinte. O diretório pai também deve ser confiável; uma pasta separada não equivale a uma barreira de segurança.

Manter arquivos que já existem

Quando precisar trabalhar em um destino já existente e preservar arquivos com o mesmo caminho, use -n.

unzip -n project.zip -d restore/

Uma cópia já presente, como restore/project/readme.txt, é mantida mesmo que seu conteúdo difira do ZIP. Entradas ainda ausentes podem ser extraídas. Portanto, -n evita a substituição, mas não verifica se a versão preservada está correta, é mais recente ou é igual à versão empacotada.

Conferir os caminhos antes de extrair

O modo unzip -Z -1 mostra somente os nomes das entradas, uma por linha, sem extrair os arquivos.

unzip -Z -1 bundle.zip

Por exemplo, um bundle.zip contendo exatamente os dois caminhos abaixo produz esta lista:

docs/readme.txt
images/logo.png

Essa saída ilustra o conteúdo desse pacote, não é uma lista fixa de todo ZIP. Para reproduzi-la com arquivos próprios numa pasta de teste, crie as pastas com mkdir -p docs images, crie docs/readme.txt com printf 'hello\n' > docs/readme.txt e copie uma imagem PNG válida sua para images/logo.png. Depois crie um ZIP novo com zip bundle.zip docs/readme.txt images/logo.png e execute a consulta acima. Esses nomes não devem existir antes do preparo, para evitar substituir dados seus.

  1. Consulte a origem do ZIP e a lista completa. Confira se os caminhos, as extensões e os tamanhos correspondem ao material esperado; nomes estranhos, caminhos absolutos ou componentes como .. exigem investigação.
  2. Execute unzip -t bundle.zip. O teste descomprime as entradas em memória e compara o CRC, a soma de verificação cíclica, com o valor armazenado. Ele não grava os arquivos extraídos no destino.
  3. Se o conteúdo e o teste forem aceitáveis, escolha um diretório novo sob seu controle. Para esse pacote, unzip bundle.zip -d target-directory cria os caminhos abaixo de target-directory/; confirme antes que esse nome não aponta para um destino existente ou um link.
  4. Confira os arquivos recuperados antes de usá-los. Não execute imediatamente programas ou scripts recebidos de uma origem desconhecida. A verificação de CRC não demonstra autenticidade, ausência de código malicioso ou inclusão de todos os arquivos que você precisava.

Na verificação de exemplos em 30 de outubro de 2026, o UnZip 6.00 do Git for Windows foi executado pelo Git Bash 5.3.9 com pacotes próprios preparados pelo Zip 3.0 do TeX Live para Windows. Os quatro blocos executáveis acima terminaram com código 0; a extração recuperou os bytes esperados, -n preservou um arquivo editado e ainda extraiu uma entrada ausente. O teste retornou 0 para o ZIP íntegro e 2 após uma alteração controlada nos dados. Isso não verifica isolamento contra arquivos maliciosos nem permissões e metadados de um Linux nativo.

Opções principais

Opção Função
-l Lista nomes, tamanhos descomprimidos e datas das entradas.
-t Testa os dados comprimidos e o CRC sem gravar os arquivos extraídos no disco.
-d diretório Define o destino da extração e conserva os subcaminhos armazenados no ZIP.
-n Ignora a extração de arquivos já existentes, sem perguntar. Entradas ausentes ainda podem ser criadas.
-o Sobrescreve arquivos existentes sem confirmação. Use somente quando a substituição for deliberada e houver cópia independente do que precisa preservar.

Cuidados com extração, erros e sobrescrita

No comportamento padrão do Info-ZIP, a extração pergunta antes de substituir um arquivo existente. Evite responder a essas perguntas sem conferir o caminho; -o elimina a confirmação e -n mantém a versão existente. Uma substituição não é desfeita automaticamente pelo unzip: a recuperação da versão anterior depende de uma cópia ou de outro mecanismo de histórico disponível.

Para ZIPs de origem desconhecida, não use privilégios de administrador. Examine os caminhos, os links simbólicos — referências para outro caminho — e o espaço disponível. Mesmo um destino aparentemente vazio pode ser inadequado se ele ou seus diretórios pais forem links inesperados. A consulta e o teste são etapas de verificação, não uma garantia de contenção de qualquer arquivo hostil.

O código de saída 0 indica conclusão normal sem erros ou avisos no UnZip; leia também as mensagens e os resultados dos arquivos. Se ocorrer uma falha, não continue como se a recuperação estivesse completa: uma extração interrompida pode deixar parte dos arquivos no destino. Reavalie o pacote e o espaço e repita em outro diretório novo, preservando o ZIP e os arquivos que já tinha. Os detalhes dos códigos e métodos de compressão ou criptografia aceitos dependem da versão e das opções compiladas.

Pergunta frequente

Como extrair um ZIP sem substituir arquivos existentes?

A escolha mais clara é um diretório novo e vazio sob seu controle. Se for necessário usar um diretório já existente, unzip -n project.zip -d restore/ preserva arquivos com os mesmos caminhos e pode acrescentar os que faltam. O sucesso dessa operação não confirma que os arquivos preservados são iguais aos do ZIP; confira o conteúdo antes de depender deles.

Documentação oficial

Consulte o manual do UnZip publicado pelo Ubuntu para a descrição das opções, do teste de CRC e dos códigos de saída. A página man unzip instalada no seu sistema permite conferir diferenças da distribuição e da implementação.