Comando zip: compactar pastas, descompactar com unzip e opções de compactação

Ambiente de testeFamília RHELAlmaLinux 9.8conta rootVerificado em 2026-11-05
Comandos de compressão · arquivamentozipunzipLocalização/usr/bin/zip
Compactar pastas e descompactar com unzip

O comando zip agrupa arquivos e pastas no Linux em um único arquivo zip compactado, e para descompactar usa-se o unzip junto com ele. Em um servidor AlmaLinux 9, compactar a pasta de um site com zip -r reduziu 35.825 bytes para 4.158 bytes, e o unzip -O corrigiu os nomes de arquivo ilegíveis de um zip criado no Windows.

A saída abaixo vem de uma pasta de trabalho em um servidor AlmaLinux 9.8, executada como root, com horários em UTC. A pasta site e os arquivos de anotações compactados são arquivos de exemplo criados para o teste. O zip criado no Windows foi reproduzido com um arquivo de teste cujos nomes de arquivo foram gravados em CP949.

1️⃣ Como usar o comando zip

  • ↪️ Compactar arquivos e pastas (-r)

Depois de zip, escreva primeiro o nome do novo arquivo zip e, em seguida, liste os arquivos que vão dentro dele. O comando abaixo compacta dois arquivos, readme.txt e memo.txt, em um único notes.zip.

zip notes.zip readme.txt memo.txt
  adding: readme.txt (deflated 92%)
  adding: memo.txt (stored 0%)

O [deflated 92%] no fim da linha é quanto o arquivo diminuiu em relação ao tamanho original. O [stored 0%] na linha do memo.txt, de 71 bytes, significa que ele foi guardado no tamanho original, sem compactação.

Para compactar uma pasta, adicione -r. Se você escrever só o nome da pasta sem -r, entra apenas a entrada da pasta site/, sem os arquivos dentro dela.

zip nodir.zip site
  adding: site/ (stored 0%)

A pasta site a ser compactada tem três subpastas e seis arquivos, como mostrado abaixo.

site/
css/
style.css
js/
app.js
logs/
access.log
index.html
about.html
.htaccess

Com -r, entram as dez entradas: as subpastas, os arquivos dentro delas e até o .htaccess, cujo nome começa com ponto.

zip -r site.zip site
  adding: site/ (stored 0%)
  adding: site/css/ (stored 0%)
  adding: site/css/style.css (deflated 93%)
  adding: site/js/ (stored 0%)
  adding: site/js/app.js (deflated 87%)
  adding: site/logs/ (stored 0%)
  adding: site/logs/access.log (deflated 94%)
  adding: site/index.html (deflated 91%)
  adding: site/about.html (deflated 87%)
  adding: site/.htaccess (deflated 9%)

Para ver o que há em um arquivo zip pronto sem descompactar, use unzip -l. Os arquivos guardados somavam 35.825 bytes, e o ls -l mostrou site.zip com 4.158 bytes.

unzip -l site.zip
Archive:  site.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  10-28-2026 22:10   site/
        0  10-28-2026 22:10   site/css/
     4431  10-28-2026 22:10   site/css/style.css
        0  10-28-2026 22:10   site/js/
     1882  10-28-2026 22:10   site/js/app.js
        0  10-28-2026 22:10   site/logs/
    24134  10-28-2026 22:10   site/logs/access.log
     3723  10-28-2026 22:10   site/index.html
     1612  10-28-2026 22:10   site/about.html
       43  10-28-2026 22:10   site/.htaccess
---------                     -------
    35825                     10 files
ls -l site.zip
-rw-r--r-- 1 root root 4158 Oct 28 23:05 site.zip

2️⃣ Opções do comando zip

  • ↪️ -x, -u, -d, nível de compactação, -e

Entre as opções do comando zip, -x deixa de fora os arquivos que combinam com um padrão. Ao indicar [site/logs/*] para excluir a pasta de logs, a pasta logs e o access.log ficam de fora, e entram só oito entradas.

zip -r site-nolog.zip site -x 'site/logs/*'
  adding: site/ (stored 0%)
  adding: site/css/ (stored 0%)
  adding: site/css/style.css (deflated 93%)
  adding: site/js/ (stored 0%)
  adding: site/js/app.js (deflated 87%)
  adding: site/index.html (deflated 91%)
  adding: site/about.html (deflated 87%)
  adding: site/.htaccess (deflated 9%)

Coloque o padrão entre aspas simples para que o shell não troque [*] por nomes de arquivo antes. Com o mesmo objetivo, o manual oficial dá um exemplo com uma barra invertida antes de [*].

-u coloca de novo só os arquivos que mudaram depois que o zip foi criado. Depois de acrescentar uma linha ao fim de index.html, executar com -ru coloca de novo apenas esse arquivo, como [updating].

zip -ru site.zip site
updating: site/index.html (deflated 90%)

Executar o mesmo comando outra vez sem arquivos alterados não exibiu nada, e o código de saída foi 12. No manual oficial, 12 significa que o zip não tem nada a fazer.

zip -ru site.zip site; echo $?
12

Para apagar entradas dentro de um arquivo zip, use -d. Ao indicar [site/logs/*], a entrada da pasta logs e o access.log são apagados de site.zip.

zip -d site.zip 'site/logs/*'
deleting: site/logs/
deleting: site/logs/access.log

Os números de -0 a -9 são o nível de compactação, e, segundo o manual oficial, o padrão é -6. A mesma pasta site foi compactada três vezes com -q, sem saída, para comparar os tamanhos. Como uma linha foi acrescentada a index.html no teste do -u, o total dos arquivos originais agora é de 35.875 bytes.

zip -qr -0 level0.zip site
zip -qr level6.zip site
zip -qr -9 level9.zip site
ls -l level*.zip
-rw-r--r-- 1 root root 37433 Oct 28 23:05 level0.zip
-rw-r--r-- 1 root root  4179 Oct 28 23:05 level6.zip
-rw-r--r-- 1 root root  3874 Oct 28 23:05 level9.zip
Nível de compactaçãoTamanho do arquivo zipEm relação ao total original
Total dos arquivos originais35.875 bytes100%
-0 (sem compactação)37.433 bytes104.3%
-6 (padrão)4.179 bytes11.6%
-9 (compactação máxima)3.874 bytes10.8%

Os 37.433 bytes gerados com -0 ficaram maiores que o total original de 35.875 bytes. É o tamanho dos dados sem compactação mais 1.558 bytes de cabeçalho, como nomes de arquivo e horários, acrescentados a cada entrada. O -9 ficou 305 bytes menor que o padrão, e toda a diferença veio do maior arquivo, o access.log.

Para colocar uma senha, adicione -e. A senha é digitada duas vezes, e os caracteres não aparecem na tela.

zip -e secret.zip memo.txt
Enter password:
Verify password:
  adding: memo.txt (stored 0%)

Mesmo o secret.zip, criado com -e, mostrou no unzip -l os nomes, tamanhos e datas dos arquivos sem senha. Só o conteúdo dos arquivos é criptografado, então não serve para material em que os nomes de arquivo também precisem ficar ocultos.

unzip -l secret.zip
Archive:  secret.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       71  10-28-2026 22:10   memo.txt
---------                     -------
       71                     1 file

O -P, que coloca a senha direto na linha de comando, é uma opção que o manual oficial avisa não ser segura, porque outros usuários do mesmo servidor podem ver os comandos em execução. O manual também descreve a própria criptografia padrão do zip como relativamente fraca.

Ao descompactar um zip criado com -e, o unzip pede a senha para cada arquivo e, se ela for digitada corretamente, o arquivo é descompactado.

unzip secret.zip -d dec
Archive:  secret.zip
[secret.zip] memo.txt password:
 extracting: dec/memo.txt

📌 Principais opções: resultados deste artigo

OpçãoTarefaResultado neste artigo
zip -rInclui todas as subpastas e arquivos da pastaSem -r, uma linha adding: site/; com -r, dez entradas, incluindo .htaccess
zip -xDeixa de fora os arquivos que combinam com um padrãoSem site/logs/*, só oito entradas, sem a pasta logs nem o access.log
zip -uColoca de novo só os arquivos alterados depois que o zip foi criadoUma linha updating: site/index.html (deflated 90%); sem alterações, nenhuma saída e código de saída 12
zip -dApaga entradas dentro do arquivo zipdeleting: site/logs/ e deleting: site/logs/access.log
zip -qOculta as linhas exibidas durante a compactaçãoOs três comandos compactados com -qr (-0, padrão, -9) terminam sem linhas adding
zip -0Só guarda, sem compactarlevel0.zip com 37433 bytes, maior que o total original
zip -9Compacta ao menor tamanho (padrão -6)level9.zip 3874 bytes; level6.zip, criado com o padrão, 4179 bytes
zip -ePede uma senha e criptografa o conteúdoPede Enter password: e Verify password: e depois adding: memo.txt (stored 0%)
unzip -lLista as entradas guardadas sem descompactarsite.zip com 10 files, 35825 bytes no total
unzip -dDefine a pasta de destino e cria a pasta se ela não existirComeça com creating: restore/site/, e a estrutura da pasta site é descompactada dentro de restore
unzip -oSobrescreve todos os arquivos existentes sem perguntarCinco linhas inflating sem perguntas
unzip -nPula os arquivos existentes sem perguntarNada aparece depois da linha Archive: site.zip
unzip -tTesta os dados compactados sem descompactarOK para cada entrada e No errors detected; o broken.zip cortado dá End-of-central-directory signature not found
unzip -ODefine a codificação de caracteres dos nomes de arquivo dentro do zipCom -O CP949, os nomes ilegíveis aparecem como 보고서.txt e 견적서.txt ("relatório" e "orçamento" em coreano)
unzip -pEnvia o conteúdo descompactado para a saída padrão em vez de criar arquivosSó aparecem as duas linhas do .htaccess, sem criar arquivo

📎 Outras opções: segundo o manual oficial

OpçãoTarefa
zip -mApaga os arquivos e pastas originais depois de compactar (apaga depois que o arquivo zip está pronto; o manual oficial recomenda usar junto com -T)
zip -jGuarda só os nomes de arquivo, sem caminhos de pasta
zip -yGuarda o link simbólico como link em vez do arquivo para o qual ele aponta
zip -TTesta o zip criado e, se o teste falhar, não altera o zip original
zip -fSubstitui pelos arquivos alterados apenas as entradas que já estão no zip, sem adicionar arquivos novos
zip -iInclui só os arquivos que combinam com o padrão indicado
zip -PEscreve a senha direto na linha de comando (o manual oficial avisa que não é seguro)
unzip -jDescompacta só os arquivos em uma pasta, sem criar a estrutura de pastas do zip
unzip -xIndica as entradas que não serão descompactadas
unzip -qOculta as linhas exibidas durante a descompactação
unzip -uDescompacta só os arquivos que faltam no disco e os mais novos
unzip -vMostra na lista também o método de compactação, o tamanho compactado, a taxa e o CRC

3️⃣ Como usar o comando unzip

  • ↪️ Descompactar zip no Linux com -d, -o e -n

Para descompactar um arquivo zip no Linux, escreva o nome do arquivo zip depois de unzip. Se você não definir uma pasta com -d, o conteúdo é descompactado na pasta atual (segundo o manual oficial); por isso, desta vez foi indicada a pasta restore.

unzip site.zip -d restore
Archive:  site.zip
   creating: restore/site/
   creating: restore/site/css/
  inflating: restore/site/css/style.css
   creating: restore/site/js/
  inflating: restore/site/js/app.js
  inflating: restore/site/index.html
  inflating: restore/site/about.html
  inflating: restore/site/.htaccess

Se a pasta indicada com -d não existir, o unzip a cria e descompacta a estrutura da pasta site dentro dela como está.

Ao descompactar de novo no mesmo lugar, o unzip para a cada arquivo que já existe e pergunta se deve sobrescrevê-lo. Ao escolher [N]one, ele termina sem sobrescrever nenhum dos arquivos restantes.

unzip site.zip -d restore
Archive:  site.zip
replace restore/site/css/style.css? [y]es, [n]o, [A]ll, [N]one, [r]ename: N

Para não ter perguntas, adicione -o ou -n. O -o sobrescreve todos os arquivos existentes, e o -n os pula. Como o manual oficial classifica o -o como uma opção perigosa, confira antes se a pasta pode ser sobrescrita e só então adicione -o.

unzip -o site.zip -d restore
Archive:  site.zip
  inflating: restore/site/css/style.css
  inflating: restore/site/js/app.js
  inflating: restore/site/index.html
  inflating: restore/site/about.html
  inflating: restore/site/.htaccess
unzip -n site.zip -d restore
Archive:  site.zip

Ao descompactar com -n em um lugar onde todos os arquivos já existem, nada aparece depois da linha Archive.

Para descompactar só uma parte de um arquivo zip, escreva um caminho ou padrão depois do nome do arquivo zip. Ao indicar [site/css/*], só a pasta css e o style.css são descompactados.

unzip site.zip 'site/css/*' -d part
Archive:  site.zip
   creating: part/site/css/
  inflating: part/site/css/style.css

4️⃣ Erros do unzip

  • ↪️ End-of-central-directory e nomes de arquivo ilegíveis

Teste com unzip -t um arquivo zip recebido de outro servidor antes de descompactá-lo. Se os dados compactados não tiverem problemas, cada entrada mostra OK e a última linha mostra [No errors detected].

unzip -t site.zip
Archive:  site.zip
    testing: site/                    OK
    testing: site/css/                OK
    testing: site/css/style.css       OK
    testing: site/js/                 OK
    testing: site/js/app.js           OK
    testing: site/index.html          OK
    testing: site/about.html          OK
    testing: site/.htaccess           OK
No errors detected in compressed data of site.zip.

Um zip cujo final foi cortado por uma transferência interrompida terminou com [End-of-central-directory signature not found]. É o resultado do teste com -t de um broken.zip que manteve só os primeiros 2.000 bytes do site.zip, que tinha ficado com 2.436 bytes depois de apagar as entradas de logs com -d.

unzip -t broken.zip
Archive:  broken.zip
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of broken.zip or
        broken.zip.zip, and cannot find broken.zip.ZIP, period.

O unzip lê primeiro a lista de arquivos que fica bem no fim do arquivo zip (o central directory). Por isso, não conseguiu testar nem a primeira entrada do broken.zip, cujo final foi cortado.

Um arquivo que não é zip deu a mesma mensagem. Ao abrir no unzip o site.tar.gz, empacotado com tar, terminou com o mesmo erro; um arquivo tar.gz é descompactado com o comando tar.

unzip site.tar.gz
Archive:  site.tar.gz
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of site.tar.gz or
        site.tar.gz.zip, and cannot find site.tar.gz.ZIP, period.

Um arquivo zip criado no Windows às vezes guarda os nomes de arquivo em uma codificação de caracteres do Windows em vez de UTF-8. Ao abrir com unzip -l em um servidor UTF-8 o report-win.zip, cujos nomes foram gravados em CP949, os nomes de arquivo apareceram como símbolos ilegíveis.

unzip -l report-win.zip
Archive:  report-win.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       26  10-28-2026 22:10   ║╕░э╝н.txt
       17  10-28-2026 22:10   ░▀└√╝н.txt
---------                     -------
       43                     2 files

Se você escrever depois de -O a codificação de caracteres do Windows que criou o zip, os nomes aparecem corretamente, e os arquivos descompactados com a mesma opção são criados com o nome original.

unzip -O CP949 -l report-win.zip
Archive:  report-win.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       26  10-28-2026 22:10   보고서.txt
       17  10-28-2026 22:10   견적서.txt
---------                     -------
       43                     2 files
unzip -O CP949 report-win.zip -d win
Archive:  report-win.zip
  inflating: win/보고서.txt
  inflating: win/견적서.txt

Segundo a ajuda do unzip, -O é a opção para zip criados no DOS ou no Windows, e -I é para zip criados em outros sistemas.

As mensagens de erro que apareceram ao descompactar e o que verificar em seguida estão abaixo.

SaídaSignificadoO que verificar em seguida
End-of-central-directory signature not foundA lista de arquivos no fim do zip não foi encontrada: o arquivo está cortado ou não é um zipComparar o tamanho com o original e baixar de novo · tar.gz com tar
cannot find or openNão há arquivo com esse nome na pasta atualNome e local do arquivo com ls
skipping: … incorrect passwordSenha errada três vezes, e esse arquivo foi pulado (código de saída 82)Maiúsculas e minúsculas da senha e idioma de entrada
Nomes de arquivo viram símbolosNomes gravados em uma codificação de caracteres do WindowsEssa codificação (CP949 etc.) depois de -O

🔲 Simulador do comando zip

No simulador abaixo, você pode digitar os passos: compactar com zip e depois listar ou descompactar com unzip.

Simulador do comando zipZip 3.0 · UnZip 6.00
[root@server work]#
Funciona só dentro do navegador e não compacta arquivos reais. As taxas de compactação são valores medidos, e os arquivos novos criados no simulador têm valores estimados. Use ↑↓ para chamar de volta os comandos digitados antes.

🔢 FAQ & conteúdo recomendado

Ao abrir no unzip um arquivo .gz compactado com gzip, ele terminou com [End-of-central-directory signature not found]. Ao descompactá-lo com [gzip -d readme.txt.gz], readme.txt.gz voltou a ser readme.txt. Um .tar.gz, feito empacotando vários arquivos com tar e depois compactando com gzip, é descompactado de uma vez com tar.

No servidor AlmaLinux 9 verificado, zip e unzip eram comandos instalados pelos pacotes zip e unzip, respectivamente. Por isso, na família RHEL eles são instalados com [sudo dnf install zip unzip] e na família Debian com [sudo apt install zip unzip] (segundo a lista oficial de pacotes do Debian).

Escreva depois de unzip -p o arquivo zip e o caminho dentro dele, e o conteúdo aparece direto na tela. Ao executar [unzip -p site.zip site/.htaccess], só apareceram as duas linhas do .htaccess, sem criar arquivo.

ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Demonstre sua humanidade: 10   +   6   =