Wie kann ich in der Unix-Befehlszeile komprimieren / dekomprimieren?

541

Wie kann ich Zip-Archive über die Befehlszeile erstellen und extrahieren?

joachim
quelle
3
@joachim, du solltest die Frage in einer Frage stellen und eine Antwort in einer Antwort geben. Es ist kein Problem, Ihre eigenen Fragen zu beantworten, aber nicht als Teil der Frage selbst, da dies den gesamten Community-Stimmen-auf-die-beste-Antwort-Vorteil von SO aufteilt. Darüber hinaus ist dies wahrscheinlich besser für Superuser geeignet, da es nicht mit der Programmierung zusammenhängt.
2
Wo werden Sie dokumentieren, wie Sie online gehen und SO überprüfen, wenn Sie Ihr Login vergessen haben?
@ rlb.usa: Ich arbeite an vielen verschiedenen Orten auf vielen verschiedenen Servern. Die Verwendung von SA für eine Notiz wie diese hilft auch anderen Menschen, wie ich es sehe.
Joachim

Antworten:

663

In der Regel wird tarein nicht komprimiertes Archiv erstellt und entweder gzipoder bzip2komprimiert. Die entsprechenden Befehle gunzipund bunzip2können verwendet werden, um das Archiv zu dekomprimieren, oder Sie können nur Flags für den tarBefehl verwenden, um die Dekomprimierung durchzuführen.

Wenn Sie sich speziell auf das Zip-Dateiformat beziehen , können Sie einfach die Befehle zipund verwenden unzip.

Komprimieren:

zip squash.zip file1 file2 file3

oder um ein Verzeichnis zu komprimieren

zip -r squash.zip dir1

So dekomprimieren Sie:

unzip squash.zip

Dadurch wird es in Ihr aktuelles Arbeitsverzeichnis entpackt.

Justin Ethier
quelle
72
Ich persönlich verwende immer nur die zip -r9 archive.zip files...Syntax (-r = rekursiv -9 = maximale Komprimierung).
Amphetamachine
3
Nur als Randnotiz: zipKann viele verschiedene Arten von .ZIP-Archiven erstellen sowie viele verschiedene Kompressoren verwenden. Andererseits gibt es eine Reihe anderer Komprimierungswerkzeuge mit ähnlichen Namen: 7-Zip, gzip, bzip2, rzip usw., die nicht austauschbar sind.
Polemon
5
Falls Sie nicht möchten, dass das übergeordnete Verzeichnis enthalten ist:cd dir1; zip -r ../squash.zip *
Marinos An
Ich bin verwirrt, habe dies getan und bekomme eine lange Liste von Inflationen und Extraktionen, aber wenn ich das Verzeichnis überprüfe, ist es leer, für die ursprüngliche Zip-Datei speichern? Wohin geht das alles?
Summer Developer
11
Verwenden Sie für den Datensatz, unzip -d myfolder squash.zipum in ein separates neues Verzeichnis ( myfolder) zu extrahieren, anstatt alle Dateien direkt in das aktuelle Verzeichnis zu verschieben. Dies kann ärgerlich sein, wenn die ZIP-Datei in der obersten Ebene viele Dateien und Verzeichnisse enthält. Dies ahmt nach, wie die meisten Tools zum Entpacken der Benutzeroberfläche funktionieren.
Alexander Klimetschek
64

Es gibt eine wirklich große Anzahl von verschiedenen Möglichkeiten , zu komprimieren und unter UNIX - Derivaten dekomprimieren so dass ich davon ausgehen , werde man im allgemeinen Sinne „zip“ zu verstehen und nicht als ein spezifischen Dateiformat.

Sie können Dateien im komprimierten Format mit dem GNU- tarProgramm komprimieren :

tar -zcvf myfile.tgz .

Welches wird das aktuelle Verzeichnis tun. Ersetzen Sie diese .durch andere Dateinamen, wenn Sie etwas anderes möchten.

Verwenden Sie zum Entpacken dieser Datei Folgendes:

tar -zxvf myfile.tgz

Dies setzt natürlich voraus, dass Sie tarin der Lage sind, sowohl die Komprimierung als auch das Zusammenführen von Dateien zu einer einzigen durchzuführen.

Wenn nicht, können Sie nur tar cvfgefolgt von gzip(falls verfügbar) für die Komprimierung und gunzipanschließend verwenden tar xvf.


Für spezielle Handhabung von ZIP - Format - Dateien, würde ich empfehlen , das Herunterladen 7zipund die Verwendung dieser - es erkennt eine große Vielzahl von Dateiformaten, einschließlich der ZIP ein.


quelle
Oder verwenden Sie tar jcvf file.tar.bz2..., um im bzip2-Format oder tar Jcvf file.tar.xz ...für die xz-Komprimierung zu komprimieren.
OldTimer
4
Ich habe Ihre Antwort abgelehnt, weil es um den Umgang mit ZIP-Archiven und nicht mit TAR-Dateien geht.
Seestern
3
@Starfish, das liegt sicherlich in deinen Rechten, danke, dass du zumindest erklärt hast, warum, so viele Leute nehmen sich nicht die Zeit, das zu tun :-) Ich habe "zip" im allgemeineren Sinne (Komprimierung) genommen und nicht ein bestimmtes Format. also werde ich das klarer machen.
Beachten Sie, dass tar-Archive möglicherweise nicht richtig funktionieren, wenn Sie zwischen verschiedenen Plattformen, Mac zu Linux oder umgekehrt wechseln. Zip ist viel sicherer, da es auf allen Systemen korrekt funktioniert.
user1751825
Ich nehme an, technisch gesehen ist das gzip, also ist das in Ordnung. Ich vermute. Ziemlich offensichtlich nicht das, wonach die Frage gestellt wurde.
Owl
30

Wenn Sie keine zip- und unzip-Pakete installiert haben und Java installiert haben, können Sie jarFolgendes entpacken:

jar -xf file.zip
mlocke
quelle
3
Nicht mein Server, kein Entpacken, Zip, 7z, nichts ... Und das hat funktioniert. Vielen Dank!
Dariusz
2
Das ist ein toller Tipp.
Seestern
29

Nun, wenn es darum geht, Dateien für eine Vielzahl von Betriebssystemen zu verteilen, würde ich 7-zip empfehlen .

Normalerweise erhalten Sie im Paket p7zipden Befehl 7zund 7za, mit dem Sie Ihre eigenen 7z-Archive erstellen können.

7zakann auch Standard- Zip-Archive ( pkzip ) dekomprimieren (und sie auch mit dem -tzipSwitch erstellen ).

Komprimieren:

7za a archive.7z file1 file2 directory/

Dekomprimieren:

7za x archive.7z

Es kann auch selbstextrahierende Archive mit dem -sfxSchalter erstellen :

7za a -sfx archive.exe files1 file2 dir

Ich empfehle diese Methode, falls Windows-Benutzer 7z-Archive nicht öffnen können (falls Sie ein Tool dazu empfehlen möchten: PeaZip ).

Wenn Sie denselben Komprimierungsalgorithmus für Ihre Tarballs verwenden möchten, verwenden Sie den -JSchalter mit tar:

tar cJf archive.tar.xz file1 file2 dir

xzist ein UNIX - Tool, das LZMA2 für die Kompression, funktioniert aber die Art und Weise verwendet gz, bz2usw. funktioniert. Es funktioniert sogar als Filter.

7z schafft keine Archive mit voller Dateisystem Informationen über UNIX, so würden Sie verwenden müssen , tarbevor Sie 7z (aber da 7z speichert andere Informationen über die tarDatei, würde ich empfehlen , mit xz, wie es für sie ausgelegt ist):

tar cf - file1 file2 dir | 7za z -si archive.tar.7z
Polemon
quelle
2
Ich sollte diese Antwort vielleicht mit anhängen atool, es ist ein nettes kleines Tool, das die Verwendung vieler verschiedener Kompressoren komfortabler macht. Binden Sie das zu aund Erstellen eines Archivs wird a arc.7z folder/oder Extrahieren eines einfachena arc.7z
Polemon
21
unzip <filename>

und

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

Sie müssen sicherstellen, dass diese Befehle über Ihren Paketmanager installiert werden. Es ist nicht schwerer als irgendetwas anderes in der Kommandozeile zu benutzen. Es ist sicherlich einfacher als Archive mit tar zu erstellen.

Seestern
quelle
Ich weiß, dass dies ein alter Thread ist, aber das ist die beste Antwort. Spricht nicht über 7z oder Teer, es ist kurz und bündig
Kyle
4

BSD Tar kann dies auch

bsdtar acf bravo.zip alfa.jpg

Oder:

bsdtar xf bravo.zip
Steven Penny
quelle
BSD tarhat den Vorteil, dass es im Vergleich zu GNU tarund anderen Formaten einige zusätzliche Komprimierungsformate unterstützt tar. Der größte Vorteil ist vielleicht, dass dies unter Verwendung einer tarähnlichen Syntax geschieht . Sie können sicher verwenden 7z, unrar, unzipusw. von der Kommandozeile, aber sie verwenden eine andere Syntax.
njsg
3

Die üblichste Antwort ist pax, welche über cpiound empfohlen wird tar.

Im Gegensatz zu cpiound POSIX tar, aber wie GNU tar, paxist es möglich, Dateien zu archivieren und das Archiv zu komprimieren. Dieses Verhalten unterscheidet sich von dem zip, bei dem jede Datei komprimiert wird, bevor sie in das Archiv gestellt wird.

mouviciel
quelle
1
Ist paxUnterstützung von Zip - Archiven?
Seestern
Nein, und es werden auch keine paxArchive unterstützt !
Roblogic
2

Dies gilt nur für die Extraktion.

Dafür habe ich angefangen zu verwenden dtrx.

Der springende Punkt dabei ist, die Komplexität zu beseitigen. Sie übergeben einfach ein beliebiges Archiv an das Archiv und es wird herausgefunden, was damit zu tun ist. Zip, tar, gz ... Verwendung ist immer gleich - dtrx archive.zip. Es stellt ein paar Fragen und du bist fertig.

dtrxist in den meisten Repositorys verfügbar, sodass Sie apt| yumes installieren.

JackLeo
quelle
1

Ich versuche oft, die geänderten Dateien in meinem Arbeitsverzeichnis zu komprimieren - entweder um alle geänderten Dateien in ein anderes Sandbox-Arbeitsverzeichnis zu kopieren oder um sie für kurze Zeit zu behalten, weil ich einige der Änderungen rückgängig machen möchte.

In diesem Fall kopiere ich die Liste der geänderten Dateien in eine temporäre Datei und verwende sie zipmit der Option -@.

Nehmen wir an, ich habe die Dateien Foo.h, Bar.cc und TestBar.cc geändert.

Angenommen, ich erstelle eine Datei mit dem Namen modified-files.txt, deren Inhalt wie folgt lautet:

Foo.h
Bar.cc
TestBar.cc

Ich führe den folgenden Befehl aus, um diese Dateien zu komprimieren:

cat modified-files.txt | zip modified-files.zip -@
R Sahu
quelle