Comando zip in Linux: creare archivi ZIP e verificarne il contenuto

zip raccoglie file e directory in un unico archivio ZIP, comprimendoli quando opportuno. Indica prima il nome dell’archivio e poi i file da includere; per percorrere anche le sottodirectory usa -r.

ZIP è utile per scambiare più file fra sistemi diversi, ma il risultato va controllato. Un nome di archivio nuovo evita di modificare un ZIP precedente: se riusi un archivio esistente, zip può sostituire voci con lo stesso percorso e aggiungerne altre, lasciando anche vecchie voci non selezionate.

Sintassi e preparazione

zip [options] archive.zip file or directory...

Sostituisci i segnaposto con opzioni e percorsi reali. Gli esempi si riferiscono a Info-ZIP Zip 3.0: controlla zip -v e man zip sulla distribuzione. Serve anche unzip per elencare, verificare ed estrarre il risultato. Se un comando manca, consulta il gestore di pacchetti della distribuzione e verifica il pacchetto appropriato.

Prepara una directory di prova scrivibile con report.txt, notes.txt e una cartella project/ contenente file noti, anche in una sottodirectory. Mantieni i sorgenti e controlla lo spazio disponibile. Crea gli archivi fuori dalla directory che stai raccogliendo e scegli nomi di uscita liberi. I percorsi relativi dipendono dalla directory da cui lanci il comando.

Creare un ZIP da file o da una directory

Raccogliere due file. Questo comando crea documents.zip con i due file indicati; normalmente i sorgenti rimangono:

zip documents.zip report.txt notes.txt

Includere una directory completa. Con -r vengono percorsi anche i livelli interni di project:

zip -r project.zip project/

Indicare la sola directory senza -r non significa includerne tutti i file. Inoltre, nella shell Unix project/* e project/ non sono equivalenti: l’espansione di un asterisco da parte della shell può omettere i nomi che iniziano con un punto. Con -r applicato direttamente alla directory, zip percorre anche questi nomi; controlla che non siano inclusi file riservati o non destinati alla condivisione.

Controllare i percorsi archiviati. Dopo la creazione, visualizza l’elenco con:

unzip -l project.zip

Verifica che ci siano i file e le sottodirectory attesi, senza percorsi superflui. Le dimensioni mostrate nell’elenco e i messaggi di compressione dipendono dagli input: non aspettarti una percentuale fissa di risparmio.

Esempio minimo, integrità e ripristino

In una directory di prova dove note.txt e bundle.zip non esistono, puoi creare un testo noto, archiviarlo e stampare solo i nomi contenuti:

printf 'hello\n' > note.txt
zip -q bundle.zip note.txt
unzip -Z -1 bundle.zip

Output atteso dell’ultimo comando:

note.txt

-q riduce i messaggi della creazione, mentre unzip -Z -1 elenca un nome per riga. Un nome nell’elenco non prova che tutti i dati compressi siano integri. Esegui unzip -t bundle.zip, controlla i messaggi e valuta subito lo stato di uscita, prima di avviare altri comandi.

Per verificare anche un ripristino, scegli una directory nuova e separata, per esempio unzip bundle.zip -d restored, poi confronta restored/note.txt con il sorgente corretto. Se il risultato è importante, confronta i byte o un checksum ottenuto con lo stesso metodo su una copia valida; il solo test dell’archivio non dimostra autenticità o correttezza del contenuto.

In una prova locale del 3 novembre 2026 sono stati usati Info-ZIP Zip 3.0 incluso in TeX Live per Windows e UnZip 6.00 di Git for Windows. Sono stati verificati due file con contenuto noto, la raccolta ricorsiva con un file nascosto e un file binario annidato, l’elenco, il test e il ripristino degli stessi byte. Sono stati controllati anche l’esempio bundle.zip, la conservazione di voci non selezionate in un archivio riutilizzato, -0, un’esclusione e -u con un file più recente e uno nuovo. Queste prove Windows non verificano metadati Linux, compatibilità Unicode fra sistemi, cifratura o prestazioni.

Opzioni principali e aggiornamenti

Opzione Funzione e limite
-r Include ricorsivamente i contenuti delle directory indicate.
-0 Memorizza i file senza comprimerne i dati.
-1 ... -9 Seleziona il livello: da più veloce a maggiore ricerca di compressione, secondo il metodo disponibile.
-u Aggiorna le voci se il file sorgente è più recente e aggiunge i nuovi file selezionati.
-x modello Esclude i percorsi che corrispondono al modello.

Una normale aggiunta a un ZIP esistente può sostituire la voce con lo stesso nome anche senza -u. Con -u conta invece il confronto della data del sorgente per le voci già presenti; non è un confronto del contenuto byte per byte. Non considerarlo una sincronizzazione completa: un vecchio file può rimanere nell’archivio anche quando non è più selezionato per l’aggiunta. Per un pacchetto pulito crea un nuovo archivio e controllane l’elenco.

Per escludere, per esempio, i file sotto project/cache/, puoi aggiungere -x 'project/cache/*' al comando ricorsivo. Le virgolette fanno arrivare il modello a zip senza espansione preventiva della shell. Il modello va confrontato con i percorsi interni dell’archivio: verifica l’elenco dopo ogni modifica delle esclusioni.

Spazio, compatibilità e dati riservati

Prima di aggiornare un archivio importante, fanne una copia. Controlla lo stato e gli avvisi al termine: file illeggibili o percorsi errati possono lasciare fuori elementi attesi. Non eliminare i sorgenti finché non hai verificato l’archivio e provato il ripristino.

Un livello più alto può richiedere più tempo senza migliorare sensibilmente un file già compresso. Per scambi fra sistemi, prova il risultato con il programma del destinatario, specialmente per nomi non ASCII, archivi grandi e metodi di compressione meno comuni. Permessi, proprietari e altri metadati non sono conservati o ripristinati allo stesso modo da tutti gli strumenti.

La cifratura tradizionale dei comuni ZIP protetti da password non va considerata una protezione forte per dati sensibili. Il manuale di Info-ZIP ne descrive i limiti: scegli strumenti e modalità di cifratura adeguati al tuo caso, senza confondere la compressione o il controllo di integrità con la riservatezza.

Domande frequenti

zip project.zip project/ include tutti i file interni?

Normalmente no: usa zip -r project.zip project/ per includere ricorsivamente file e sottodirectory, quindi controlla l’elenco del risultato.

Riutilizzare un ZIP crea una copia esatta della cartella attuale?

Non necessariamente. Le operazioni ordinarie possono aggiungere o aggiornare voci senza rimuovere quelle vecchie. Per distribuire soltanto i file attuali, usa un nome nuovo e verifica cosa contiene.

Documentazione ufficiale

Il manuale di Zip 3.0 distribuito da Ubuntu 24.04 descrive aggiunte, aggiornamenti, esclusioni e limiti della cifratura. Confrontalo con il manuale e la versione installati sul tuo sistema.