1 23/04/2026 10 min

Quando zip e unzip hanno senso su Linux

Su Linux, zip e unzip restano strumenti pratici quando devi scambiare archivi con ambienti eterogenei, allegare raccolte di file a un ticket, consegnare un pacchetto a chi lavora su Windows o mantenere una compatibilità semplice con software che parla ancora ZIP. Non sono l’unica scelta per la compressione: tar.gz, tar.xz o zstd spesso sono migliori per backup e distribuzioni native Linux. Però ZIP vince quando contano portabilità e immediatezza.

Il punto da chiarire subito è questo: zip crea un archivio compresso, mentre unzip lo estrae. Sembra banale, ma nella pratica il comportamento cambia in base a permessi, path relativi, caratteri speciali e struttura delle directory. Gran parte dei problemi nasce non dal formato, ma da come lo si usa.

Verificare che gli strumenti ci siano davvero

Su molte distribuzioni moderne i pacchetti non sono installati di default. Prima di lavorare, conviene verificare la presenza dei binari e, se manca qualcosa, installare il pacchetto corretto della propria distro.

zip -v
unzip -v

Se il comando risponde con la versione, sei a posto. Se ottieni command not found, installa il pacchetto con il gestore della distribuzione:

# Debian/Ubuntu
sudo apt update
sudo apt install zip unzip

# RHEL/CentOS/Alma/Rocky
sudo dnf install zip unzip

# Arch
sudo pacman -S zip unzip

Questa verifica è utile anche in ambienti minimali, container o server appena provisionati, dove spesso il pacchetto zip non è incluso nel profilo base.

Creare un archivio ZIP da file singoli

La forma più semplice è aggiungere uno o più file a un archivio nuovo. Se l’archivio non esiste, zip lo crea; se esiste, aggiunge o aggiorna il contenuto.

zip documenti.zip report.pdf note.txt immagine.png

Il risultato è un file documenti.zip che contiene i tre elementi indicati. Se vuoi vedere cosa sta facendo il comando, aggiungi -v per una modalità più verbosa, utile quando lavori su archivi grandi o in script di verifica.

Se vuoi comprimere tutti i file di una directory senza includere le sottodirectory, puoi usare un glob:

zip archivio.zip *

Attenzione però: il glob dipende dalla shell. Se ci sono file nascosti, come quelli che iniziano con punto, * non li include. In quel caso devi esplicitarli o usare un approccio diverso.

Includere directory e struttura dei percorsi

Quando devi salvare una directory intera, zip può scorrere ricorsivamente il contenuto con -r. È l’opzione che userai più spesso in produzione, perché mantiene la struttura dei percorsi sotto controllo.

zip -r backup-home.zip /home/mario/documenti

Con -r, l’archivio conterrà directory e sottodirectory. Il punto importante è capire se vuoi salvare il percorso completo o solo il contenuto. Se lanci il comando da /home/mario e comprimi documenti, dentro l’archivio troverai documenti/.... Se invece usi un path assoluto, il comportamento può includere informazioni più lunghe del necessario o, in alcuni casi, essere meno comodo all’estrazione.

Una pratica pulita è entrare nella directory padre e comprimere il contenuto relativo:

cd /home/mario
zip -r backup-documenti.zip documenti

Così ottieni un archivio più prevedibile e più facile da estrarre in un percorso diverso.

Escludere file inutili o sensibili

In backup e pacchetti di consegna è raro voler includere tutto. Cache, log, file temporanei, editor swap e credenziali non dovrebbero entrare nell’archivio. zip permette esclusioni mirate con -x.

zip -r sito.zip sito -x '*.log' '*.tmp' '*/cache/*'

Questo è utile quando lavori su applicazioni web o ambienti di sviluppo. Un archivio pulito pesa meno e riduce il rischio di esporre dati non necessari. Se devi includere file di configurazione, verifica sempre che non contengano segreti in chiaro. In quel caso, meglio redigere o ruotare prima di archiviare, non dopo.

Per archivi operativi, spesso conviene fare un controllo finale con zipinfo o unzip -l prima di distribuire il file:

unzip -l sito.zip

La lista ti mostra dimensioni e nomi dei file contenuti, così intercetti subito inclusioni sbagliate.

Capire le opzioni di compressione più utili

Il formato ZIP usa una compressione che, nella pratica, è un compromesso tra compatibilità e rapporto di compressione. Non sempre è il massimo per efficienza, ma è spesso sufficiente. Con -9 chiedi la massima compressione supportata dallo strumento, mentre -0 disattiva la compressione e memorizza i file così come sono.

zip -9 archivio.zip cartella/

La massima compressione può richiedere più CPU e non sempre porta benefici evidenti su file già compressi, come immagini JPEG, video, PDF o archivi esistenti. In questi casi stai solo consumando tempo.

Se devi archiviare molti file già compressi, il guadagno reale è minimo. Per esempio, comprimere una cartella piena di .jpg o .mp4 raramente migliora il risultato. È una buona abitudine guardare il tipo di dato prima di scegliere il metodo.

Proteggere un archivio con password

zip consente di impostare una password con -e. È comodo per uno scambio rapido, ma non va confuso con una soluzione di cifratura forte per dati sensibili a lungo termine.

zip -e segreto.zip file.txt

Il comando chiede la password in modo interattivo. Questo evita di scriverla in chiaro nella history della shell, ma non risolve il problema della gestione sicura delle credenziali nel workflow complessivo. Se devi trattare dati davvero riservati, la scelta migliore è valutare strumenti di cifratura dedicati e un processo di distribuzione controllato.

Se lavori in script, evita di mettere password direttamente nella riga di comando. Le password in chiaro finiscono facilmente nella cronologia, nei log o nella lista processi. Meglio un flusso che legga da stdin, da un secret manager o da un file protetto, se il contesto lo consente.

Estrarre un archivio con unzip

La decompressione base è altrettanto semplice. Se sei nella directory corretta, basta lanciare unzip sul file.

unzip documenti.zip

Per default, i file vengono estratti nella directory corrente. Questo è il comportamento più comodo, ma anche quello che crea più danni se il path di lavoro non è quello atteso. Prima di estrarre archivi ricevuti da terzi, controlla il contenuto con:

unzip -l documenti.zip

Se vuoi estrarre in una directory specifica, usa -d:

unzip documenti.zip -d /tmp/estrazione

È una buona pratica quando l’archivio potrebbe contenere nomi duplicati, gerarchie profonde o file che non vuoi mescolare con il contenuto della directory corrente.

Gestire sovrascritture e conflitti di nome

Uno dei casi più comuni è l’estrazione di un archivio che contiene file già presenti nella directory di destinazione. unzip può chiedere conferma per ogni sovrascrittura, oppure puoi guidarne il comportamento con opzioni apposite.

unzip -o archivio.zip -d /var/www/html

Con -o sovrascrivi automaticamente i file esistenti. È comodo in automazione, ma va usato con cautela: se il target non è quello giusto, puoi rimpiazzare file in modo non desiderato. In ambienti condivisi o in produzione, meglio estrarre in una directory temporanea e poi fare il rilascio con un passaggio controllato.

Se vuoi invece evitare overwrite e ricevere un prompt, non usare -o. In sessioni manuali è spesso la scelta più prudente.

Preservare permessi, timestamp e struttura

ZIP conserva in parte metadati come timestamp e, in molti casi, anche attributi di base. Però non va considerato equivalente a un archivio tar per fedeltà Unix completa. Se devi preservare owner, group, permessi dettagliati e link simbolici in modo affidabile tra sistemi Unix-like, ZIP non è lo strumento più robusto.

Per questo motivo, su Linux ZIP è spesso usato per scambio, non come formato principale di backup. Se il tuo obiettivo è fare un archivio di sistema per restore fedele, tar resta più adatto. ZIP è più vicino a un contenitore pratico e portabile.

Quando estrai, puoi controllare i file con:

ls -l /tmp/estrazione

Se i permessi non sono quelli che ti aspettavi, il problema potrebbe non essere nell’estrazione ma nel formato stesso o nel modo in cui i file sono stati creati.

Automatizzare zip e unzip in script

In script di manutenzione, deploy o raccolta log, ZIP è utile perché produce un file singolo facile da trasferire. Un esempio tipico è l’archiviazione di log giornalieri prima della rotazione o dell’invio a un sistema esterno.

#!/usr/bin/env bash
set -euo pipefail

DATA=$(date +%F)
zip -r "/var/tmp/log-$DATA.zip" /var/log/app -x '*.gz' '*.old'

Qui ci sono due dettagli importanti. Primo: set -euo pipefail fa fallire lo script in modo più prevedibile. Secondo: il percorso di output è esplicito, così non dipendi dalla directory corrente. In automazione, usare path assoluti riduce errori banali.

Se il contenuto da archiviare è grande, conviene aggiungere controlli di spazio disco prima di partire. Un archivio ZIP interrotto a metà non è utile a nessuno.

df -h /var/tmp
zip -r /var/tmp/dump.zip /srv/dati

In contesti di produzione, questa è una misura minima ma concreta: controlli prima, non dopo.

Leggere il contenuto senza estrarre

Spesso devi capire cosa c’è dentro un archivio senza toccare il filesystem. unzip -l mostra elenco e dimensioni, ma puoi anche ottenere informazioni più dettagliate con strumenti di ispezione come zipinfo, se installato.

zipinfo archivio.zip

Questo è utile quando ricevi un file da un fornitore, da un collega o da una pipeline automatica. Prima di estrarre, controlli se l’archivio contiene directory inattese, file con nomi strani o percorsi troppo lunghi. È un controllo semplice che evita sorprese operative.

Un’altra verifica sensata è cercare file compressi dentro file compressi. Se trovi già molti .zip, .jpg, .mp4 o .pdf, il guadagno di ulteriore compressione sarà modesto.

Problemi comuni e come leggerli senza andare a tentoni

Se unzip segnala errori di decompressione, non partire dal presupposto che il comando sia rotto. Le cause più comuni sono archivio danneggiato, trasferimento incompleto, encoding dei nomi file o mismatch di permessi/percorsi.

Un controllo rapido è confrontare dimensione e checksum del file ricevuto con la sorgente, se disponibile. Per esempio:

sha256sum archivio.zip

Se il checksum non coincide, il problema è a monte. Se coincide ma l’estrazione fallisce, guarda il messaggio di errore: spesso indica un file corrotto interno o un nome non compatibile con il filesystem di destinazione.

Se l’archivio proviene da un sistema con charset diverso, i nomi possono apparire sbagliati. In quel caso devi verificare l’encoding atteso e, se necessario, usare le opzioni disponibili per la conversione dei nomi. Non è il caso di forzare a caso: meglio capire il formato originale.

Quando preferire tar al posto di zip

ZIP è comodo, ma non sempre è la scelta migliore. Se lavori solo in ambiente Linux e vuoi un archivio fedele a permessi, owner, symlink e struttura Unix, tar con una compressione esterna è spesso più adatto. Se invece il requisito principale è la compatibilità con altri sistemi, ZIP resta un compromesso valido.

Una regola pratica: usa ZIP quando il destinatario o il flusso è eterogeneo; usa tar quando controlli tu sia la piattaforma sia il restore. In molte infrastrutture reali, questa distinzione evita discussioni inutili e archivi che si aprono solo “quasi bene”.

Comandi essenziali da tenere a portata di mano

Questi sono i comandi che tornano più spesso nella pratica quotidiana:

zip -r archivio.zip cartella/
unzip archivio.zip
unzip -l archivio.zip
unzip archivio.zip -d /tmp/output
zip -x '*.log' -r pulito.zip cartella/

Se li usi con ordine mentale chiaro, copri gran parte dei casi normali: creazione, ispezione, estrazione e filtraggio. Il resto è quasi sempre una variazione su questi temi.

Regola operativa da ricordare

ZIP è uno strumento di scambio e di lavoro rapido, non una bacchetta magica. Funziona bene quando sai cosa stai includendo, dove lo estrai e quali metadati ti servono davvero. La differenza tra un archivio utile e uno problematico, nella pratica, sta quasi sempre nei dettagli: path, esclusioni, destinazione e controllo prima dell’estrazione.

Se usi zip e unzip con questo approccio, riduci errori banali e ottieni archivi più portabili, più puliti e più facili da gestire nel tempo.