I file ZIP sono un archivio universale comunemente utilizzato su sistemi Windows, macOS e persino Linux. È possibile creare un archivio zip o decomprimere file da uno con alcuni comandi comuni del terminale Linux.
Sommario:
Il formato di file di archivio compresso ZIP
Grazie al predominio del formato ZIP nel regno di Windows, i file ZIP sono probabilmente la forma più comune di archivio compresso al mondo.
Sebbene i file .tar.gz e tar.bz2 siano comuni su Linux, gli utenti Windows probabilmente ti invieranno un archivio in formato ZIP. E, se desideri archiviare alcuni file e inviarli a un utente Windows, il formato ZIP sarà la soluzione più semplice e compatibile per tutti.
zip, unzip e altre utilità
Potresti già sapere che i sistemi operativi Linux e Unix come macOS dispongono di strumenti che ti consentono di creare file ZIP ed estrarre file da essi, chiamati zip e unzip. Ma c’è un’intera famiglia di utilità correlate come zipcloak, zipdetails, zipsplit e zipinfo.
Abbiamo controllato alcune distribuzioni Linux per vedere se includevano queste utilità nell’installazione standard. Tutte le utilità erano presenti in Ubuntu 19.04, 18.10 e 18.04. Erano presenti anche a Manjaro 18.04. Fedora 29 includeva zip e unzip, ma nessuna delle altre utilità e questo era anche il caso di CentOS.
Per installare gli elementi mancanti su Fedora 29, usa il seguente comando:
sudo dnf install perl-IO-Compress
Per installare gli elementi mancanti su CentOS 7, utilizzare il seguente comando:
sudo yum install perl-IO-Compress
Se una qualsiasi delle utilità zip non è presente in una distribuzione Linux che non è stata menzionata sopra, utilizzare lo strumento di gestione dei pacchetti della distribuzione Linux per installare il pacchetto richiesto.
Come creare un file ZIP con il comando zip
Per creare un file ZIP, è necessario indicare a zip il nome del file di archivio e quali file includervi. Non è necessario aggiungere l’estensione “.zip” al nome dell’archivio, ma non danneggia se lo fai.
Per creare un file chiamato source_code.zip contenente tutti i file di codice sorgente C e i file di intestazione nella directory corrente, dovresti usare questo comando:
zip source_code *.c *.h
Ogni file viene elencato man mano che viene aggiunto. Vengono visualizzati il nome del file e la quantità di compressione ottenuta su quel file.
Se guardi il nuovo archivio ZIP, puoi vedere che l’estensione del file “.zip” è stata aggiunta automaticamente da zip.
ls -l source_code.zip
Se non vuoi vedere l’output da zip mentre viene creato il file ZIP, usa l’opzione -q (quiet).
zip -q source_code *.c *.h
Includere le directory nei file ZIP
Per includere sottodirectory nel file ZIP, utilizzare l’opzione -r (ricorsivo) e includere il nome della sottodirectory sulla riga di comando. Per creare un file ZIP come prima e includere anche la sottodirectory dell’archivio, utilizzare questo comando.
zip -r -q source_code archive/ *.c *.h
Per essere rispettoso della persona che estrarrà i file dal file ZIP che stai creando, è spesso educato creare file ZIP con i file al suo interno contenuti in una directory. Quando la persona che riceve il file ZIP lo estrae, tutti i file vengono inseriti ordinatamente in una directory sul proprio computer.
Nel seguente comando, archiviamo la directory di lavoro e tutte le sottodirectory. Notare che questo comando viene emesso dalla directory principale della cartella di lavoro.
zip -r -q source_code work/
Impostazione del livello di compressione
È possibile impostare la quantità di compressione applicata ai file man mano che vengono aggiunti all’archivio ZIP. L’intervallo va da 0 a 9, dove 0 non è affatto compressione. Maggiore è la compressione, maggiore è il tempo necessario per creare il file ZIP. Per i file ZIP di dimensioni modeste, la differenza di orario non è una penalità significativa. Ma poi, per file ZIP di dimensioni modeste, la compressione predefinita (livello 6) è probabilmente abbastanza buona comunque.
Per fare in modo che zip utilizzi un livello specifico di compressione, passare il numero come opzione sulla riga di comando, con un “-“, in questo modo:
zip -0 -r -q source_code work/
Il livello di compressione predefinito è 6. Non è necessario fornire l’opzione -6, ma se lo fai non farà alcun danno.
zip -r -q source_code work/
Il livello di compressione massimo è il livello 9.
zip -9 -r -q source_code work/
Con la selezione di file e directory archiviati qui, la differenza tra nessuna compressione (livello 0) e la compressione predefinita (livello 6) è 400K. La differenza tra la compressione predefinita e il livello di compressione più alto (livello 9) è solo 4K.
Potrebbe non sembrare molto, ma per archivi contenenti centinaia o addirittura migliaia di file, la piccola quantità di compressione extra per file si aggiungerebbe a un utile risparmio di spazio.
Aggiunta di password ai file ZIP
Aggiungere password ai file ZIP è facile. Usa l’opzione -e (crittografa) e ti verrà chiesto di inserire la tua password e di reinserirla per la verifica.
zip -e -r -q source_code work/
Come decomprimere un file ZIP con il comando unzip
Per estrarre i file da un file ZIP, utilizzare il comando unzip e fornire il nome del file ZIP. Tieni presente che devi fornire l’estensione “.zip”.
unzip source_code.zip
Man mano che i file vengono estratti, vengono elencati nella finestra del terminale.
I file ZIP non contengono dettagli sulla proprietà del file. Tutti i file estratti hanno il proprietario impostato sull’utente che li sta estraendo.
Proprio come zip, unzip ha un’opzione -q (silenziosa), quindi non è necessario vedere l’elenco dei file mentre i file vengono estratti.
unzip -q source_code.zip
Estrazione di file in una directory di destinazione
Per estrarre i file in una directory specifica, utilizzare l’opzione -d (directory) e fornire il percorso della directory in cui si desidera estrarre l’archivio.
unzip -q source_code.zip -d ./development
Estrai file ZIP protetti da password
Se un file ZIP è stato creato con una password, unzip ti chiederà la password. Se non si fornisce la password corretta, unzip non estrarrà i file.
unzip -q source_code.zip
Se non ti interessa che la tua password venga vista da altri, né che venga memorizzata nella cronologia dei comandi, puoi fornire la password sulla riga di comando con l’opzione -P (password). (È necessario utilizzare una “P” maiuscola)
unzip -P fifty.treacle.cutlass -q source_code.zip
Esclusione di file
Se non si desidera estrarre un particolare file o gruppo di file, utilizzare l’opzione -x (escludi). In questo esempio, vogliamo estrarre tutti i file tranne quelli che terminano con un’estensione “.h”.
unzip -q source_code.zip -x *.h
Sovrascrittura dei file
Supponi di aver estratto un archivio ma di aver eliminato per errore alcuni dei file estratti.
Una soluzione rapida per questo sarebbe estrarre nuovamente i file. Ma se provi a estrarre il file ZIP nella stessa directory di prima, unzip ti chiederà una decisione in merito alla sovrascrittura dei file. Si aspetterà una delle seguenti risposte.
A parte la risposta r (rinomina), queste risposte fanno distinzione tra maiuscole e minuscole.
y: Sì, sovrascrivi questo file
n: No, non sovrascrivere questo file
A: Tutto, sovrascrivi tutti i file
N: Nessuno, non sovrascrivere nessuno dei file
r: Rinomina, estrai questo file ma dagli un nuovo nome. Ti verrà richiesto un nuovo nome.
Per forzare la decompressione per sovrascrivere i file esistenti, utilizzare l’opzione -o (sovrascrittura).
unzip -o -q source_code.zip
Il modo più efficiente per sostituire i file mancanti sarebbe quello di decomprimere solo estrarre tutti i file nell’archivio che non si trovano nella directory di destinazione. Per fare ciò, usa l’opzione -n (mai sovrascrivere).
unzip -n source_code.zip
Guardando dentro un file ZIP
Spesso è utile e istruttivo vedere un elenco dei file all’interno di un file ZIP prima di estrarlo. Puoi farlo con l’opzione -l (archivio elenco). Viene convogliato di meno per rendere gestibile l’output.
unzip -l source_code.zip | less
L’output mostra le directory ei file all’interno del file ZIP, la loro lunghezza e l’ora e la data in cui sono stati aggiunti all’archivio. Premere “q” per uscire da less.
Ci sono altri modi per sbirciare all’interno di un file ZIP che forniscono diversi tipi di informazioni, come vedremo.
Aggiungi una password con il comando zipcloak
Se hai creato un file ZIP ma hai dimenticato di aggiungere una password, cosa puoi fare? Puoi aggiungere rapidamente una password al file ZIP utilizzando il comando zipcloak. Passa il nome del file ZIP sulla riga di comando. Ti verrà richiesta una password. È necessario verificare la password inserendola una seconda volta.
zipcloak source_code.zip
Visualizza i dettagli del file con il comando zipdetails
Il comando zipdetails ti mostrerà molte informazioni sul file ZIP. L’unico modo sensato per gestire la quantità di output che questo comando può fornire è di convogliarlo attraverso di meno.
zipdetails source_code.zip | less
Notare che le informazioni includeranno i nomi dei file anche se il file ZIP è protetto da password. Questo tipo di informazioni viene memorizzato nel file ZIP come metadati e non fa parte dei dati crittografati.
Cerca all’interno del file con il comando zipgrep
Il comando zipgrep ti consente di cercare all’interno dei file in un file ZIP. Nell’esempio seguente, vogliamo sapere quali file all’interno del file ZIP contengono il testo “keyval.h”.
zipgrep keyval.h source_code.zip
Possiamo vedere che i file slang.c e getval.c contengono la stringa “keyval.h”. Possiamo anche vedere che ci sono due copie di ciascuno di questi file in diverse directory nel file ZIP.
Visualizza le informazioni con il comando zipinfo
Il comando zipinfo ti offre un altro modo per guardare all’interno di un file ZIP. Come prima, convogliamo l’output attraverso less.
zipinfo source_code.zip | less
Da sinistra a destra l’output mostra:
I permessi dei file
La versione dello strumento utilizzato per creare il file ZIP
La dimensione del file originale
Un descrittore di file (descritto di seguito)
Il metodo di compressione (deflazione, in questo caso)
I dati e il timestamp
Il nome del file e qualsiasi directory
Il descrittore di file è composto da due caratteri. Il primo carattere sarà una “t” o una “b” per indicare un file di testo o binario. Se è una lettera maiuscola il file è crittografato. Il secondo carattere può essere uno dei quattro caratteri. Questo carattere rappresenta il tipo di metadati inclusi per questo file: nessuno, un’intestazione locale estesa, un “campo extra” o entrambi.
-: Se nessuno dei due esiste, il carattere sarà un trattino
l: se è presente un’intestazione locale estesa ma nessun campo aggiuntivo
x: se non è presente un’intestazione locale estesa ma è presente un campo aggiuntivo
X: se è presente un’intestazione locale estesa e c’è un campo aggiuntivo
Dividi il file con il comando zipsplit
Se è necessario inviare il file ZIP a qualcun altro ma ci sono limitazioni di dimensione o problemi con la trasmissione del file, è possibile utilizzare il comando zipsplit per dividere il file ZIP originale in una serie di file ZIP più piccoli.
L’opzione -n (dimensione) consente di impostare una dimensione massima per ciascuno dei nuovi file ZIP. In questo esempio, suddividiamo il file source_code.zip. Non vogliamo che nessuno dei nuovi file ZIP sia più grande di 100 KB (102400 byte).
zipsplit -n 102400 source_code.zip
La dimensione scelta non può essere inferiore alla dimensione di nessuno dei file nel file ZIP.
Usando questi comandi, puoi creare i tuoi file ZIP, decomprimere i file ZIP ricevuti ed eseguire varie altre operazioni su di essi senza mai lasciare il terminale Linux.