1 16/04/2026 8 min

Se devi leggere il contenuto di un file ZIP in Linux senza estrarlo subito, hai diverse strade. La scelta giusta dipende da cosa vuoi ottenere: vedere l’elenco dei file, ispezionare un singolo documento, leggere da terminale il contenuto di un archivio compresso o integrare il tutto in uno script. In pratica, non serve quasi mai decomprimere tutto in una directory temporanea se l’obiettivo è solo verificare nomi, dimensioni, date o aprire un file specifico.

Il punto chiave è questo: un file ZIP non è un filesystem. Per leggerne il contenuto devi usare un programma che sappia interpretare l’indice centrale dell’archivio e, se necessario, decomprimere al volo i singoli elementi. Su Linux gli strumenti più comuni sono unzip, zipinfo, bsdtar e 7z. In molti casi bastano i primi due, ma conoscere anche le alternative evita workaround inutili.

Vedere la lista dei file senza estrarre nulla

La verifica più semplice è l’elenco del contenuto. Se vuoi sapere cosa c’è dentro un archivio ZIP, il comando più diretto è unzip -l. Mostra nome file, dimensione originale, data e ora.

Comando base:

unzip -l archivio.zip

Output tipico:

Archive:  archivio.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
     1245  2024-11-18 10:22   documento.txt
    48211  2024-11-18 10:23   report.pdf
---------                     -------
    49456                     2 files

Se ti serve un output più sintetico e adatto agli script, usa zipinfo:

zipinfo archivio.zip

Per un controllo rapido spesso è utile anche:

unzip -Z1 archivio.zip

Questo stampa solo i nomi dei file, uno per riga. È comodo se devi filtrare con grep, awk o xargs.

Leggere un file specifico dentro lo ZIP

Se il tuo obiettivo è aprire il contenuto di un singolo file senza estrarre l’intero archivio, unzip -p è la scelta più utile. Il flag -p manda il contenuto su standard output, quindi puoi visualizzarlo con less, salvarlo in un file o passarlo a un altro comando.

Esempio: leggere un file di testo dentro lo ZIP.

unzip -p archivio.zip documento.txt

Se il file è lungo, conviene usare less per la navigazione:

unzip -p archivio.zip documento.txt | less

Se il file dentro lo ZIP ha un percorso annidato, devi indicarlo esattamente come appare nell’elenco. Per esempio:

unzip -p archivio.zip cartella/sotto-cartella/note.txt

Qui c’è un dettaglio pratico: se il nome contiene spazi o caratteri speciali, mettilo tra virgolette nel comando della shell. Non è un problema dello ZIP, è il normale comportamento della shell Linux.

Filtrare il contenuto quando non conosci il nome esatto

Molto spesso non sai già come si chiama il file che ti interessa. In quel caso la sequenza più efficiente è: elencare i nomi, filtrare, poi leggere il file selezionato. Per esempio, se cerchi tutti i file .log o .txt:

unzip -Z1 archivio.zip | grep -E '\.(txt|log)$'

Una volta trovato il nome, puoi leggerlo con unzip -p:

unzip -p archivio.zip percorso/del/file.log | less

Per un archivio con molti file, questa tecnica evita di estrarre tutto e riduce il rischio di sporcare il filesystem con file temporanei inutili.

Usare bsdtar come alternativa più flessibile

Su molte distribuzioni moderne puoi usare bsdtar per leggere un ZIP. È utile quando vuoi un tool unico per più formati d’archivio oppure quando unzip non è installato. Per elencare il contenuto:

bsdtar -tf archivio.zip

Per stampare un file specifico su stdout:

bsdtar -xOf archivio.zip documento.txt

Il vantaggio è simile a unzip -p, ma con una sintassi coerente con altri formati supportati da tar. In ambienti server, avere bsdtar installato può semplificare automatismi e recovery operativi.

Leggere ZIP con 7z quando servono archivi problematici

7z è spesso il jolly quando il file ZIP ha caratteristiche meno comuni o quando vuoi un tool molto tollerante. Per elencare il contenuto:

7z l archivio.zip

Per estrarre un singolo file su stdout, la strada è meno lineare rispetto a unzip, ma resta fattibile in script e automazioni. In molti casi però il vantaggio reale di 7z non è la comodità, ma la capacità di aprire archivi che altri tool trattano male.

Se devi scegliere un solo comando per il lavoro quotidiano, resta su unzip. Se invece stai facendo troubleshooting su archivi ricevuti da terze parti, 7z è un buon secondo strumento da avere pronto.

Leggere file binari, testo e documenti compressi

Leggere un file di testo dentro uno ZIP è semplice. Leggere un PDF, un’immagine o un file Office è diverso: puoi comunque estrarlo in streaming, ma il contenuto non sarà “leggibile” nel terminale. In questi casi il problema non è lo ZIP, è il formato interno.

Per esempio, se lo ZIP contiene un PDF:

unzip -p archivio.zip report.pdf > report.pdf

Qui non stai leggendo il contenuto testuale del PDF, stai solo estraendo il file in modo mirato. Dopo puoi aprirlo con il visualizzatore appropriato. Lo stesso vale per immagini, archivi annidati o file binari proprietari.

Se lo ZIP contiene un file di testo ma vuoi ispezionarlo senza salvarlo, puoi combinarlo con strumenti classici come sed, head, tail o grep. Esempio:

unzip -p archivio.zip log.txt | grep -i error

Verificare integrità e capire se l’archivio è sano

Prima di leggere un archivio sospetto, conviene verificare che non sia corrotto. Con unzip -t puoi testare l’integrità dei file compressi senza estrarli su disco.

unzip -t archivio.zip

Se l’output termina con qualcosa come No errors detected in compressed data, l’archivio è leggibile e la decompressione dovrebbe andare a buon fine. Se invece compaiono errori di CRC, file mancanti o struttura danneggiata, la lettura del contenuto può essere parziale o fallire del tutto.

Questo passaggio è importante soprattutto in ambito operativo: se ricevi ZIP da upload utenti, backup remoti o scambi via mail, verificare prima l’integrità ti evita di perdere tempo su problemi che non dipendono dalla shell ma dal file stesso.

Gestire archivi protetti da password

Se lo ZIP è protetto da password, puoi comunque elencarne il contenuto, ma la lettura dei file richiederà la chiave corretta. Con unzip la password si passa con -P, ma va usata con cautela perché può finire nella history della shell e nei processi visibili durante l’esecuzione.

Per questo, in contesti reali, è meglio inserire la password in modo interattivo quando possibile, oppure usare meccanismi più sicuri a livello di pipeline o script, evitando di lasciarla in chiaro in file di testo o variabili esportate senza controllo.

Esempio di lettura con richiesta interattiva, se il tool la supporta nel tuo contesto:

unzip archivio.zip

Se devi automatizzare, valuta attentamente il contesto di sicurezza: un archivio protetto non è una protezione forte se la password circola in chiaro nei job o nei file di configurazione.

Leggere lo ZIP da script Bash

In automazione, spesso vuoi sapere se dentro uno ZIP esiste un file specifico e, in caso positivo, leggerlo senza estrarlo. Con Bash puoi fare una verifica veloce così:

if unzip -Z1 archivio.zip | grep -qx 'documento.txt'; then
  unzip -p archivio.zip documento.txt
fi

Se vuoi salvare il contenuto solo quando il file esiste:

file='documento.txt'
if unzip -Z1 archivio.zip | grep -qx "$file"; then
  unzip -p archivio.zip "$file" > /tmp/documento.txt
fi

La logica è semplice: prima interroghi l’indice dell’archivio, poi leggi solo il file desiderato. È un approccio più pulito dell’estrazione completa, soprattutto su host condivisi, server con spazio limitato o pipeline CI/CD.

Quando conviene estrarre comunque

Non sempre leggere in streaming è la scelta migliore. Se devi ispezionare molti file, analizzare una struttura complessa o passare il contenuto a strumenti che lavorano meglio su file reali, estrarre in una directory temporanea può essere più pratico. La differenza è che lo fai in modo controllato, non per abitudine.

Un approccio ordinato è questo:

  1. crea una directory temporanea dedicata;
  2. estrai solo l’archivio necessario;
  3. esegui i controlli;
  4. rimuovi la directory a fine lavoro.
tmpdir=$(mktemp -d)
unzip archivio.zip -d "$tmpdir"
# analisi qui
rm -rf "$tmpdir"

Questo resta utile quando devi trattare più file correlati, non un singolo documento. Ma se l’obiettivo è solo “vedere cosa c’è dentro”, l’estrazione completa è di solito uno spreco di I/O e spazio.

Scelte pratiche in base al caso d’uso

Se vuoi una regola rapida, usa questo criterio:

  • Elenco file: unzip -l o unzip -Z1.
  • Lettura di un file di testo: unzip -p archivio.zip file.txt | less.
  • Archivio da verificare: unzip -t.
  • Tool alternativo multi-formato: bsdtar -tf e bsdtar -xOf.
  • Archivio “strano” o problematico: prova 7z l.

In un contesto operativo, la differenza tra leggere e decomprimere non è teorica: cambia il carico su disco, il rischio di lasciare file temporanei e la velocità con cui arrivi all’informazione che ti serve. Su macchine con poco spazio libero o su storage lento, la lettura mirata fa davvero la differenza.

In sintesi, per leggere il contenuto di un file ZIP in Linux non serve una procedura unica e rigida. Se vuoi esplorare l’archivio, usa l’elenco; se vuoi aprire un file preciso, usa lo streaming; se vuoi automatizzare, filtra prima i nomi e poi leggi solo ciò che serve. È il modo più pulito per lavorare senza estrazioni inutili e senza complicare il flusso operativo.