Comando zip: compactar pastas, descompactar com unzip e opções de compactação
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
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.
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.zipArchive: 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 filesls -l site.zip-rw-r--r-- 1 root root 4158 Oct 28 23:05 site.zip2️⃣ Opções do comando zip
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 siteupdating: 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 $?12Para 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.logOs 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 sitezip -qr level6.zip sitezip -qr -9 level9.zip sitels -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ção | Tamanho do arquivo zip | Em relação ao total original |
|---|---|---|
| Total dos arquivos originais | 35.875 bytes | 100% |
| -0 (sem compactação) | 37.433 bytes | 104.3% |
| -6 (padrão) | 4.179 bytes | 11.6% |
| -9 (compactação máxima) | 3.874 bytes | 10.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.txtEnter 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.zipArchive: secret.zip
Length Date Time Name
--------- ---------- ----- ----
71 10-28-2026 22:10 memo.txt
--------- -------
71 1 fileO -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 decArchive: secret.zip
[secret.zip] memo.txt password:
extracting: dec/memo.txt📌 Principais opções: resultados deste artigo
| Opção | Tarefa | Resultado neste artigo | |
|---|---|---|---|
| zip -r | Inclui todas as subpastas e arquivos da pasta | Sem -r, uma linha adding: site/; com -r, dez entradas, incluindo .htaccess | |
| zip -x | Deixa de fora os arquivos que combinam com um padrão | Sem site/logs/*, só oito entradas, sem a pasta logs nem o access.log | |
| zip -u | Coloca de novo só os arquivos alterados depois que o zip foi criado | Uma linha updating: site/index.html (deflated 90%); sem alterações, nenhuma saída e código de saída 12 | |
| zip -d | Apaga entradas dentro do arquivo zip | deleting: site/logs/ e deleting: site/logs/access.log | |
| zip -q | Oculta as linhas exibidas durante a compactação | Os três comandos compactados com -qr (-0, padrão, -9) terminam sem linhas adding | |
| zip -0 | Só guarda, sem compactar | level0.zip com 37433 bytes, maior que o total original | |
| zip -9 | Compacta ao menor tamanho (padrão -6) | level9.zip 3874 bytes; level6.zip, criado com o padrão, 4179 bytes | |
| zip -e | Pede uma senha e criptografa o conteúdo | Pede Enter password: e Verify password: e depois adding: memo.txt (stored 0%) | |
| unzip -l | Lista as entradas guardadas sem descompactar | site.zip com 10 files, 35825 bytes no total | |
| unzip -d | Define a pasta de destino e cria a pasta se ela não existir | Começa com creating: restore/site/, e a estrutura da pasta site é descompactada dentro de restore | |
| unzip -o | Sobrescreve todos os arquivos existentes sem perguntar | Cinco linhas inflating sem perguntas | |
| unzip -n | Pula os arquivos existentes sem perguntar | Nada aparece depois da linha Archive: site.zip | |
| unzip -t | Testa os dados compactados sem descompactar | OK para cada entrada e No errors detected; o broken.zip cortado dá End-of-central-directory signature not found | |
| unzip -O | Define a codificação de caracteres dos nomes de arquivo dentro do zip | Com -O CP949, os nomes ilegíveis aparecem como 보고서.txt e 견적서.txt ("relatório" e "orçamento" em coreano) | |
| unzip -p | Envia o conteúdo descompactado para a saída padrão em vez de criar arquivos | Só aparecem as duas linhas do .htaccess, sem criar arquivo |
📎 Outras opções: segundo o manual oficial
| Opção | Tarefa | |
|---|---|---|
| zip -m | Apaga 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 -j | Guarda só os nomes de arquivo, sem caminhos de pasta | |
| zip -y | Guarda o link simbólico como link em vez do arquivo para o qual ele aponta | |
| zip -T | Testa o zip criado e, se o teste falhar, não altera o zip original | |
| zip -f | Substitui pelos arquivos alterados apenas as entradas que já estão no zip, sem adicionar arquivos novos | |
| zip -i | Inclui só os arquivos que combinam com o padrão indicado | |
| zip -P | Escreve a senha direto na linha de comando (o manual oficial avisa que não é seguro) | |
| unzip -j | Descompacta só os arquivos em uma pasta, sem criar a estrutura de pastas do zip | |
| unzip -x | Indica as entradas que não serão descompactadas | |
| unzip -q | Oculta as linhas exibidas durante a descompactação | |
| unzip -u | Descompacta só os arquivos que faltam no disco e os mais novos | |
| unzip -v | Mostra na lista também o método de compactação, o tamanho compactado, a taxa e o CRC |
3️⃣ Como usar o comando unzip
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 restoreArchive: 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/.htaccessSe 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 restoreArchive: site.zip
replace restore/site/css/style.css? [y]es, [n]o, [A]ll, [N]one, [r]ename: NPara 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 restoreArchive: 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/.htaccessunzip -n site.zip -d restoreArchive: site.zipAo 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 partArchive: site.zip
creating: part/site/css/
inflating: part/site/css/style.css4️⃣ Erros do unzip
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.zipArchive: 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.zipArchive: 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.gzArchive: 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.zipArchive: report-win.zip
Length Date Time Name
--------- ---------- ----- ----
26 10-28-2026 22:10 ║╕░э╝н.txt
17 10-28-2026 22:10 ░▀└√╝н.txt
--------- -------
43 2 filesSe 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.zipArchive: report-win.zip
Length Date Time Name
--------- ---------- ----- ----
26 10-28-2026 22:10 보고서.txt
17 10-28-2026 22:10 견적서.txt
--------- -------
43 2 filesunzip -O CP949 report-win.zip -d winArchive: report-win.zip
inflating: win/보고서.txt
inflating: win/견적서.txtSegundo 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ída | Significado | O que verificar em seguida |
|---|---|---|
| End-of-central-directory signature not found | A lista de arquivos no fim do zip não foi encontrada: o arquivo está cortado ou não é um zip | Comparar o tamanho com o original e baixar de novo · tar.gz com tar |
| cannot find or open | Não há arquivo com esse nome na pasta atual | Nome e local do arquivo com ls |
| skipping: … incorrect password | Senha 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ímbolos | Nomes gravados em uma codificação de caracteres do Windows | Essa 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.
🔢 FAQ & conteúdo recomendado
WordPress · Plugins
Como instalar plugin no WordPress: instalação pela busca, envio do ZIP e ativação
Os passos para instalar um plugin pela tela Adicionar plugins, pesquisando no diretório oficial ou enviando um arquivo zip.
Buscar
Comando find do Linux
O comando find procura arquivos por condições como nome, extensão, tamanho e data, e continua o trabalho com os arquivos encontrados.
Gerenciamento de arquivos
Opções do comando cp e sobrescrita em massa na execução
As opções do comando cp para copiar arquivos e diretórios, e como copiar em massa sem confirmação de sobrescrita.
ℹ️ 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.