Comando zip: comprimere cartelle, estrarre con unzip e opzioni di compressione
Il comando zip raccoglie su Linux file e cartelle in un unico file zip compresso, e per estrarlo si usa unzip insieme a lui. Su un server AlmaLinux 9, comprimendo con zip -r la cartella di un sito web si è passati da 35.825 byte a 4.158 byte, e unzip -O ha corretto i nomi di file illeggibili di un file zip creato su Windows.
L'output qui sotto proviene da una cartella di lavoro su un server AlmaLinux 9.8, eseguito come root, con orari in UTC. La cartella site e i file di note compressi sono file di esempio creati per il test. Lo zip creato su Windows è stato riprodotto con un file di prova i cui nomi di file sono salvati in CP949.
1️⃣ Come usare il comando zip
Dopo zip scrivi prima il nome del nuovo file zip e poi elenca i file da metterci dentro. Il comando qui sotto comprime due file, readme.txt e memo.txt, in un unico notes.zip.
zip notes.zip readme.txt memo.txt adding: readme.txt (deflated 92%)
adding: memo.txt (stored 0%)Il [deflated 92%] a fine riga indica di quanto si è ridotto il file rispetto alla dimensione originale. Lo [stored 0%] sulla riga di memo.txt, da 71 byte, significa che il file è stato salvato alla dimensione originale, senza compressione.
Per comprimere una cartella aggiungi -r. Se scrivi solo il nome della cartella senza -r, nell'archivio entra solo la voce della cartella site/ e non i file che contiene.
zip nodir.zip site adding: site/ (stored 0%)La cartella site da comprimere ha tre sottocartelle e sei file, come mostrato sotto.
Con -r entrano tutte e dieci le voci: le sottocartelle, i file al loro interno e perfino .htaccess, il cui nome inizia con un punto.
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%)Per vedere cosa contiene un file zip finito senza estrarlo, usa unzip -l. I file salvati sommavano 35.825 byte, e ls -l mostrava site.zip di 4.158 byte.
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️⃣ Opzioni del comando zip
Tra le opzioni del comando zip, -x esclude i file che corrispondono a un pattern. Indicando [site/logs/*] per lasciare fuori la cartella dei log, restano fuori la cartella logs e access.log, ed entrano solo otto voci.
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%)Racchiudi il pattern tra apici singoli, così la shell non trasforma prima [*] in nomi di file. Allo stesso scopo, il manuale ufficiale porta un esempio con una barra rovesciata davanti a [*].
-u rimette solo i file cambiati dopo la creazione del file zip. Dopo aver aggiunto una riga alla fine di index.html, eseguendo con -ru viene rimesso solo quel file, come [updating].
zip -ru site.zip siteupdating: site/index.html (deflated 90%)Eseguendo di nuovo lo stesso comando senza file cambiati non è stato stampato nulla, e il codice di uscita era 12. Nel manuale ufficiale, 12 significa che zip non ha nulla da fare.
zip -ru site.zip site; echo $?12Per eliminare voci in un file zip usa -d. Indicando [site/logs/*], la voce della cartella logs e access.log vengono eliminate da site.zip.
zip -d site.zip 'site/logs/*'deleting: site/logs/
deleting: site/logs/access.logI numeri da -0 a -9 sono il livello di compressione e, secondo il manuale ufficiale, il valore predefinito è -6. La stessa cartella site è stata compressa tre volte con -q, senza output, per confrontare le dimensioni. Poiché durante il test di -u è stata aggiunta una riga a index.html, il totale dei file originali è ora di 35.875 byte.
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| Livello di compressione | Dimensione del file zip | Rispetto al totale originale |
|---|---|---|
| Totale dei file originali | 35.875 byte | 100% |
| -0 (nessuna compressione) | 37.433 byte | 104.3% |
| -6 (predefinito) | 4.179 byte | 11.6% |
| -9 (compressione massima) | 3.874 byte | 10.8% |
I 37.433 byte ottenuti con -0 superavano il totale originale di 35.875 byte. È la dimensione dei dati non compressi più 1.558 byte di intestazioni, come nomi di file e orari, aggiunte a ogni voce. -9 è risultato di 305 byte più piccolo del predefinito, e tutta la differenza veniva dal file più grande, access.log.
Per impostare una password aggiungi -e. La password si digita due volte, e i caratteri digitati non compaiono sullo schermo.
zip -e secret.zip memo.txtEnter password:
Verify password:
adding: memo.txt (stored 0%)Anche secret.zip, creato con -e, mostrava con unzip -l nomi, dimensioni e date dei file senza password. Viene cifrato solo il contenuto dei file, quindi non è adatto a materiale di cui vanno nascosti anche i nomi dei file.
unzip -l secret.zipArchive: secret.zip
Length Date Time Name
--------- ---------- ----- ----
71 10-28-2026 22:10 memo.txt
--------- -------
71 1 file-P, che mette la password direttamente sulla riga di comando, è un'opzione che il manuale ufficiale segnala come non sicura, perché altri utenti dello stesso server possono vedere i comandi in esecuzione. Il manuale descrive anche la cifratura standard di zip stessa come relativamente debole.
Quando estrai uno zip creato con -e, unzip chiede la password per ogni file e, se la inserisci correttamente, quel file viene estratto.
unzip secret.zip -d decArchive: secret.zip
[secret.zip] memo.txt password:
extracting: dec/memo.txt📌 Opzioni principali: risultati di questo articolo
| Opzione | Compito | Risultato in questo articolo | |
|---|---|---|---|
| zip -r | Include tutte le sottocartelle e i file della cartella | Senza -r una riga adding: site/, con -r dieci voci compreso .htaccess | |
| zip -x | Esclude i file che corrispondono a un pattern | Escludendo site/logs/* solo otto voci, senza la cartella logs e access.log | |
| zip -u | Rimette solo i file cambiati dopo la creazione del file zip | Una riga updating: site/index.html (deflated 90%); senza modifiche nessun output e codice di uscita 12 | |
| zip -d | Elimina voci nel file zip | deleting: site/logs/ e deleting: site/logs/access.log | |
| zip -q | Nasconde le righe mostrate durante la compressione | Tutti e tre i comandi compressi con -qr (-0, predefinito, -9) finiscono senza righe adding | |
| zip -0 | Salva senza comprimere | level0.zip di 37433 byte, più grande del totale originale | |
| zip -9 | Comprime il più possibile (predefinito -6) | level9.zip 3874 byte, level6.zip creato con il predefinito 4179 byte | |
| zip -e | Chiede una password e cifra il contenuto | Chiede Enter password: e Verify password:, poi adding: memo.txt (stored 0%) | |
| unzip -l | Elenca le voci salvate senza estrarre | site.zip con 10 files, 35825 byte in totale | |
| unzip -d | Indica la cartella di destinazione e la crea se non esiste | Inizia con creating: restore/site/ e la struttura della cartella site viene estratta sotto restore | |
| unzip -o | Sovrascrive tutti i file esistenti senza chiedere | Cinque righe inflating senza domande | |
| unzip -n | Salta i file esistenti senza chiedere | Dopo la riga Archive: site.zip non compare nulla | |
| unzip -t | Verifica i dati compressi senza estrarre | OK per ogni voce e No errors detected; il broken.zip troncato dà End-of-central-directory signature not found | |
| unzip -O | Indica la codifica dei caratteri dei nomi di file nello zip | Con -O CP949 i nomi illeggibili compaiono come 보고서.txt e 견적서.txt ("relazione" e "preventivo" in coreano) | |
| unzip -p | Invia il contenuto estratto allo standard output invece di creare file | Compaiono solo le due righe di .htaccess, senza creare file |
📎 Altre opzioni: secondo il manuale ufficiale
| Opzione | Compito | |
|---|---|---|
| zip -m | Elimina i file e le cartelle originali dopo la compressione (li elimina quando il file zip è completo; il manuale ufficiale consiglia di usarla con -T) | |
| zip -j | Salva solo i nomi dei file, senza percorsi delle cartelle | |
| zip -y | Salva il collegamento simbolico come collegamento invece del file a cui punta | |
| zip -T | Verifica il file zip creato e, se la verifica fallisce, lascia invariato lo zip originale | |
| zip -f | Sostituisce con i file cambiati solo le voci già presenti nello zip, senza aggiungere file nuovi | |
| zip -i | Include solo i file che corrispondono al pattern indicato | |
| zip -P | Scrive la password direttamente sulla riga di comando (il manuale ufficiale avverte che non è sicuro) | |
| unzip -j | Estrae solo i file in una cartella, senza creare la struttura di cartelle dello zip | |
| unzip -x | Indica le voci da non estrarre | |
| unzip -q | Nasconde le righe mostrate durante l'estrazione | |
| unzip -u | Estrae solo i file che mancano sul disco e quelli più recenti | |
| unzip -v | Mostra nell'elenco anche metodo di compressione, dimensione compressa, rapporto e CRC |
3️⃣ Come usare il comando unzip
Per estrarre un file zip su Linux, scrivi il nome del file zip dopo unzip. Senza -d per scegliere la cartella, l'estrazione avviene nella cartella corrente (secondo il manuale ufficiale), perciò questa volta è stata indicata la cartella 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 la cartella indicata con -d non esiste, unzip la crea ed estrae al suo interno la struttura della cartella site così com'è.
Se estrai di nuovo nello stesso punto, unzip si ferma a ogni file già presente e chiede se sovrascriverlo. Scegliendo [N]one, termina senza sovrascrivere nessuno dei file rimanenti.
unzip site.zip -d restoreArchive: site.zip
replace restore/site/css/style.css? [y]es, [n]o, [A]ll, [N]one, [r]ename: NPer non avere domande aggiungi -o o -n. -o sovrascrive tutti i file esistenti, -n li salta. Poiché il manuale ufficiale indica -o come opzione pericolosa, verifica prima che la cartella si possa sovrascrivere e solo dopo aggiungi -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.zipEstraendo con -n dove tutti i file esistono già, dopo la riga Archive non compare nulla.
Per estrarre solo una parte di un file zip, scrivi un percorso o un pattern dopo il nome del file zip. Indicando [site/css/*] vengono estratti solo la cartella css e style.css.
unzip site.zip 'site/css/*' -d partArchive: site.zip
creating: part/site/css/
inflating: part/site/css/style.css4️⃣ Errori di unzip
Un file zip ricevuto da un altro server va verificato con unzip -t prima di estrarlo. Se i dati compressi non hanno problemi, ogni voce mostra OK e l'ultima riga riporta [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.Uno zip la cui parte finale era stata tagliata da un trasferimento interrotto è finito con [End-of-central-directory signature not found]. È il risultato della verifica con -t di un broken.zip che conservava solo i primi 2.000 byte di site.zip, sceso a 2.436 byte dopo l'eliminazione delle voci logs con -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.unzip legge per prima la lista dei file che si trova proprio alla fine del file zip (il central directory). Per questo non è riuscito a verificare neanche la prima voce di broken.zip, la cui parte finale era tagliata.
Un file che non è uno zip ha dato lo stesso messaggio. Aprendo con unzip site.tar.gz, raggruppato con tar, è finito con lo stesso errore; un file tar.gz si estrae con il 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.Un file zip creato su Windows a volte salva i nomi dei file in una codifica di caratteri di Windows invece che in UTF-8. Aprendo con unzip -l su un server UTF-8 report-win.zip, i cui nomi sono salvati in CP949, i nomi dei file sono comparsi come simboli illeggibili.
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 dopo -O scrivi la codifica di caratteri del Windows che ha creato lo zip, i nomi compaiono correttamente, e anche i file estratti con la stessa opzione vengono creati con il nome originale.
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/견적서.txtSecondo la guida di unzip, -O è l'opzione per gli zip creati su DOS o Windows, e -I quella per gli zip creati su altri sistemi.
I messaggi di errore comparsi durante l'estrazione e cosa controllare dopo sono elencati qui sotto.
| Output | Significato | Cosa controllare dopo |
|---|---|---|
| End-of-central-directory signature not found | La lista dei file alla fine dello zip non è stata trovata: il file è troncato o non è uno zip | Confrontare la dimensione con l'originale e scaricarlo di nuovo · tar.gz con tar |
| cannot find or open | Nessun file con quel nome nella cartella corrente | Nome e posizione del file con ls |
| skipping: … incorrect password | Password sbagliata tre volte, quel file è stato saltato (codice di uscita 82) | Maiuscole e minuscole della password e lingua di input |
| Nomi di file trasformati in simboli | Nomi salvati in una codifica di caratteri di Windows | Quella codifica (CP949 ecc.) dopo -O |
🔲 Simulatore del comando zip
Nel simulatore qui sotto puoi digitare tu stesso i passaggi: comprimere con zip, poi elencare o estrarre con unzip.
🔢 FAQ & contenuti consigliati
WordPress · Plugin
Come installare un plugin WordPress: installazione dalla ricerca, caricamento dello zip e attivazione
I passaggi per installare un plugin dalla schermata Aggiungi plugin, cercando nella directory ufficiale o caricando un file zip.
Cerca
Comando find di Linux
Il comando find cerca file in base a condizioni come nome, estensione, dimensione e data, e prosegue il lavoro sui file trovati.
Gestione dei file
Opzioni del comando cp e sovrascrittura in blocco all'esecuzione
Le opzioni del comando cp per copiare file e directory, e come copiare in blocco senza conferma di sovrascrittura.
ℹ️ Informativa sull'affiliazione
I contenuti di questo sito includono link di affiliazione. Se un visitatore acquista un prodotto o un servizio tramite uno di questi link, il sito riceve una commissione dal venditore. In questo processo l'importo pagato dall'acquirente (durante le promozioni l'importo scende↓) non aumenta. Prezzi, sconti e disponibilità indicati si riferiscono al momento della stesura e possono differire da quelli reali: prima di acquistare verifica sempre presso il venditore. I prodotti vengono scelti e valutati secondo criteri propri, e le commissioni non influiscono sull'ordine di presentazione né sul contenuto delle valutazioni.