Come posso comprimere / decomprimere dalla riga di comando unix?


540

Come posso creare ed estrarre archivi zip dalla riga di comando?


3
@joachim, dovresti porre la domanda in una domanda e fornire una risposta in una risposta. Non c'è alcun problema a rispondere alle tue domande ma non come parte della domanda stessa, dal momento che ciò scompone l'intero vantaggio di SO sulla risposta dei voti della community. Inoltre, questo è probabilmente più adatto per il superutente poiché non è legato alla programmazione.

2
Dove documenterai come andare online e controllare SO se dimentichi il tuo login?

@ rlb.usa: lavoro in molti posti diversi su molti server diversi. L'uso di SA per una nota come questa aiuta anche altre persone, come la vedo io.
Gioacchino

Risposte:


663

In genere si usa tarper creare un archivio compresso e uno gzipo bzip2per comprimere tale archivio. I corrispondenti comandi gunzipe bunzip2possono essere usati per decomprimere detto archivio, oppure puoi semplicemente usare i flag sul tarcomando per eseguire la decompressione.

Se ti riferisci specificamente al formato di file Zip , puoi semplicemente usare i comandi zipe unzip.

Per comprimere:

zip squash.zip file1 file2 file3

o per comprimere una directory

zip -r squash.zip dir1

Per decomprimere:

unzip squash.zip

questo lo decomprime nella directory di lavoro corrente.


72
Personalmente uso sempre e solo la zip -r9 archive.zip files...sintassi (-r = ricorsivo -9 = compressione massima).
anfetamachina,

3
Proprio come una nota a margine: zippuò creare molti gusti diversi di archivi .ZIP, oltre a utilizzare molti compressori diversi. D'altra parte, ci sono una serie di altri strumenti di compressione chiamati in modo simile: 7-Zip, gzip, bzip2, rzip, ecc. Che non sono intercambiabili.
polemon

5
Nel caso in cui non si desideri includere la directory principale:cd dir1; zip -r ../squash.zip *
Marinos Il

Sono confuso, l'ho fatto e ho una lunga lista di inflazioni ed estrazioni ma quando controllo la directory è vuota, salvo il file zip originale? Dove sta andando tutto?
Sviluppatore estivo

11
Per la cronaca, usa unzip -d myfolder squash.zipper estrarre in una nuova directory separata ( myfolder) invece di mettere tutti i file direttamente nella directory corrente, il che può essere fastidioso se il file zip contiene molti file e directory al suo livello superiore. Questo imita il funzionamento della maggior parte degli strumenti di decompressione dell'interfaccia utente.
Alexander Klimetschek l'

64

Ci sono un vero e vasto numero di differenti modi per comprimere e decomprimere in derivati UNIX così ho intenzione di assumere che volevi dire "zip" in senso generico, piuttosto che una specifica formato di file.

Puoi comprimere i file (in formato compresso) con il tarprogramma GNU :

tar -zcvf myfile.tgz .

che farà la directory corrente. Sostituisci .con altri nomi di file se vuoi qualcos'altro.

Per decomprimere quel file, utilizzare:

tar -zxvf myfile.tgz

Ciò presuppone ovviamente che tu sia in targrado di eseguire la compressione e di combinare i file in uno.

In caso contrario, puoi semplicemente utilizzare tar cvfseguito da gzip(di nuovo, se disponibile) per la compressione e gunzipseguito da tar xvf.


Per una gestione specifica dei file in formato ZIP, consiglierei di scaricarlo 7zipe usarlo - riconosce una grande varietà di formati di file, incluso quello ZIP.


Oppure usa tar jcvf file.tar.bz2...per comprimere in formato bzip2 o tar Jcvf file.tar.xz ...per la compressione xz.
OldTimer

4
Ho ridimensionato la tua risposta perché la domanda riguarda come gestire archivi zip e non file tar.
Starfish,

3
@Starfish, questo è certamente nei tuoi diritti, grazie almeno per aver spiegato perché, così tante persone non si prendono il tempo di farlo :-) Ho preso "zip" nel senso più generico (compressione) piuttosto che in un formato specifico, quindi lo renderò più chiaro.

Tenere presente che gli archivi tar potrebbero non funzionare correttamente quando ci si sposta tra piattaforme diverse, da mac a linux o viceversa. Zip è molto più sicuro, poiché funziona correttamente su tutti i sistemi.
user1751825

Suppongo che tecnicamente si tratti di gzip, quindi va bene. Suppongo. Abbastanza ovviamente non è quello che la domanda ha chiesto però.
Gufo

30

Se non hai pacchetti zip e unzip installati e hai java, puoi usare jarper decomprimere:

jar -xf file.zip

3
Non il mio server, niente decompressione, zip, 7z, niente ... E ha funzionato. Grazie!
Dariusz,

2
Questo è un ottimo consiglio.
Starfish,

29

Bene, quando si tratta di distribuire file per una varietà di sistemi operativi, consiglierei 7-zip .

Di solito nel pacchetto p7zip, otterrai il comando 7ze 7za, con il quale puoi creare i tuoi archivi 7z.

7zapuò anche decomprimere archivi zip standard ( pkzip ) (e crearli anche con l' -tzipinterruttore).

Compressione:

7za a archive.7z file1 file2 directory/

decompressione:

7za x archive.7z

Può anche creare archivi autoestraenti con l' -sfxopzione:

7za a -sfx archive.exe files1 file2 dir

Consiglio questo metodo nel caso in cui gli utenti Windows non riescano ad aprire gli archivi 7z (nel caso in cui si desideri consigliare uno strumento per questo: PeaZip ).

Se si desidera utilizzare lo stesso algoritmo di compressione con i tarball, utilizzare l' -Jopzione con tar:

tar cJf archive.tar.xz file1 file2 dir

xzè uno strumento di UNIX, che utilizza LZMA2 per la compressione, ma il modo in cui funziona gz, bz2ecc funziona. Funziona anche come filtro.

7z non crea archivi con informazioni complete sul filesystem su UNIX, quindi dovresti usarlo tarprima di usare 7z (ma poiché 7z memorizza altre informazioni sul tarfile, ti consiglio di usarlo xz, poiché è progettato per esso):

tar cf - file1 file2 dir | 7za z -si archive.tar.7z

2
Forse dovrei aggiungere questa risposta atool, è un piccolo strumento che rende più comodo l'uso di molti compressori diversi. Legalo ae creare un archivio diventa a arc.7z folder/o estrae un semplicea arc.7z
polemon

21
unzip <filename>

e

zip -r archive.zip <filename> [filename]

Dovrai assicurarti che questi comandi siano installati tramite il tuo gestore pacchetti. Non è più difficile che usare qualsiasi altra riga di comando. È sicuramente più semplice della creazione di archivi con tar.


So che questo è un vecchio thread ma questa è la risposta migliore. Non parla di 7z o tar, è conciso e diretto al punto
Kyle

4

Anche BSD Tar può fare questo

bsdtar acf bravo.zip alfa.jpg

O:

bsdtar xf bravo.zip

BSD tarha il vantaggio di supportare diversi formati di compressione aggiuntivi rispetto a GNU tare altri tar. Il più grande vantaggio è, forse, che lo fa usando una tarsintassi simile . Si può sicuramente utilizzare 7z, unrar, unzip, ecc dalla linea di comando, ma usare una diversa sintassi.
njsg

3

La risposta più standard è pax, che è raccomandata sopra cpioe tar.

A differenza di cpioPOSIX tar, ma come GNU tar, paxè in grado sia di archiviare i file sia di comprimere l'archivio. Questo comportamento è diverso da quello zipche comprime ogni file prima di inserirlo nell'archivio.


1
Fa paxgli archivi zip supporto?
Starfish,

No e non supporta paxneanche gli archivi!
roblogic

2

Questo riguarda solo l'estrazione.

Per questo, ho iniziato a usare dtrx.

Il punto è di rimuovere la complessità. Quindi gli passi semplicemente in qualsiasi archivio e capisce cosa bisogna fare con esso. Zip, tar, gz ... L'uso è sempre lo stesso - dtrx archive.zip. Fa alcune domande e il gioco è fatto.

dtrxè disponibile nella maggior parte dei repository, quindi puoi apt| yuminstallalo.


1

Mi trovo spesso a tentare di comprimere i file modificati nella mia directory di lavoro - per copiare tutti i file modificati in un'altra directory di lavoro sandbox o per conservarli per un breve periodo perché voglio annullare alcune delle modifiche.

In tal caso, copio l'elenco dei file modificati in un file temporaneo e lo utilizzo zipcon l'opzione -@.

Diciamo che ho modificato i file Foo.h, Bar.cc e TestBar.cc.

Diciamo che creo un file chiamato modified-files.txt i cui contenuti sono:

Foo.h
Bar.cc
TestBar.cc

Eseguo il seguente comando per comprimere quei file:

cat modified-files.txt | zip modified-files.zip -@
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.