So komprimieren oder entpacken Sie Dateien vom Linux-Terminal

ZIP-Dateien sind ein universelles Archiv, das häufig auf Windows-, macOS- und sogar Linux-Systemen verwendet wird. Sie können mit einigen gängigen Linux-Terminalbefehlen ein ZIP-Archiv erstellen oder Dateien daraus entpacken.

Das komprimierte ZIP-Archivdateiformat

Dank der Dominanz des ZIP-Formats im Windows-Bereich sind ZIP-Dateien wahrscheinlich die weltweit am häufigsten verwendete Form komprimierter Archive.

Während .tar.gz- und tar.bz2-Dateien unter Linux üblich sind, senden Ihnen Windows-Benutzer wahrscheinlich ein Archiv im ZIP-Format. Und wenn Sie einige Dateien archivieren und an einen Windows-Benutzer senden möchten, ist das ZIP-Format die einfachste und kompatibelste Lösung für alle.

zip, unzip und andere Dienstprogramme

Sie wissen vielleicht bereits, dass Linux- und Unix-ähnliche Betriebssysteme wie macOS über Tools verfügen, mit denen Sie ZIP-Dateien erstellen und Dateien daraus extrahieren können, die als zip und unzip bezeichnet werden. Aber es gibt eine ganze Familie verwandter Dienstprogramme wie zipcloak, zipdetails, zipsplit und zipinfo.

Wir haben bei einigen Linux-Distributionen überprüft, ob diese Dienstprogramme in der Standardinstallation enthalten sind. Alle Dienstprogramme waren in Ubuntu 19.04, 18.10 und 18.04 vorhanden. Sie waren auch in Manjaro 18.04 anwesend. Fedora 29 enthielt zip und unzip, aber keines der anderen Dienstprogramme, und das war auch bei CentOS der Fall.

Um die fehlenden Elemente auf Fedora 29 zu installieren, verwenden Sie den folgenden Befehl:

sudo dnf install perl-IO-Compress

Um die fehlenden Elemente auf CentOS 7 zu installieren, verwenden Sie den folgenden Befehl:

sudo yum install perl-IO-Compress

Wenn eines der Zip-Dienstprogramme in einer Linux-Distribution fehlt, die oben nicht erwähnt wurde, verwenden Sie das Paketverwaltungstool dieser Linux-Distribution, um das erforderliche Paket zu installieren.

So erstellen Sie eine ZIP-Datei mit dem Zip-Befehl

Um eine ZIP-Datei zu erstellen, müssen Sie zip den Namen der Archivdatei und die darin enthaltenen Dateien mitteilen. Sie müssen dem Archivnamen nicht die Erweiterung „.zip“ hinzufügen, aber es schadet nicht, wenn Sie dies tun.

Um eine Datei namens source_code.zip zu erstellen, die alle C-Quellcodedateien und Headerdateien im aktuellen Verzeichnis enthält, verwenden Sie diesen Befehl:

zip source_code *.c *.h

Jede Datei wird beim Hinzufügen aufgelistet. Der Name der Datei und der Grad der Komprimierung, der für diese Datei erreicht wurde, werden angezeigt.

Schaut man sich das neue ZIP-Archiv an, sieht man, dass die Dateiendung „.zip“ automatisch per zip hinzugefügt wurde.

ls -l source_code.zip

Wenn Sie die Ausgabe der ZIP-Datei beim Erstellen der ZIP-Datei nicht sehen möchten, verwenden Sie die Option -q (leise).

zip -q source_code *.c *.h

Einschließen von Verzeichnissen in ZIP-Dateien

Um Unterverzeichnisse in die ZIP-Datei aufzunehmen, verwenden Sie die Option -r (rekursiv) und geben Sie den Namen des Unterverzeichnisses in die Befehlszeile ein. Verwenden Sie diesen Befehl, um wie zuvor eine ZIP-Datei zu erstellen und auch das Archiv-Unterverzeichnis einzubinden.

zip -r -q source_code archive/ *.c *.h

Um Rücksicht auf die Person zu nehmen, die die Dateien aus der von Ihnen erstellten ZIP-Datei extrahiert, ist es oft höflich, ZIP-Dateien mit den darin enthaltenen Dateien in einem Verzeichnis zu erstellen. Wenn die Person, die die ZIP-Datei erhält, sie entpackt, werden alle Dateien ordentlich in einem Verzeichnis auf ihrem Computer abgelegt.

  So synchronisieren Sie Dateien automatisch zwischen Linux-Computern mit Syncthing

Im folgenden Befehl archivieren wir das Arbeitsverzeichnis und alle Unterverzeichnisse. Beachten Sie, dass dieser Befehl vom übergeordneten Verzeichnis des Arbeitsordners ausgegeben wird.

zip -r -q source_code work/

Einstellen der Komprimierungsstufe

Sie können festlegen, wie stark die Dateien komprimiert werden, wenn sie dem ZIP-Archiv hinzugefügt werden. Der Bereich reicht von 0 bis 9, wobei 0 überhaupt keine Komprimierung bedeutet. Je höher die Komprimierung, desto länger dauert die Erstellung der ZIP-Datei. Bei ZIP-Dateien von bescheidener Größe ist der Zeitunterschied kein wesentlicher Nachteil. Aber für ZIP-Dateien von bescheidener Größe ist die Standardkomprimierung (Stufe 6) wahrscheinlich sowieso gut genug.

Damit zip eine bestimmte Komprimierungsstufe verwendet, übergeben Sie die Nummer als Option auf der Befehlszeile mit einem „-“, wie folgt:

zip -0 -r -q source_code work/

Die Standardkomprimierungsstufe ist 6. Die Option -6 muss nicht angegeben werden, aber es schadet nicht, wenn Sie dies tun.

zip -r -q source_code work/

Die maximale Komprimierungsstufe ist Stufe 9.

zip -9 -r -q source_code work/

Bei der Auswahl der hier archivierten Dateien und Verzeichnisse beträgt der Unterschied zwischen keiner Komprimierung (Stufe 0) und der Standardkomprimierung (Stufe 6) 400K. Der Unterschied zwischen der Standardkomprimierung und der höchsten Komprimierungsstufe (Stufe 9) beträgt nur 4K.

Das mag nicht viel erscheinen, aber für Archive mit Hunderten oder sogar Tausenden von Dateien würde die geringe zusätzliche Komprimierung pro Datei eine lohnende Platzersparnis bedeuten.

Hinzufügen von Passwörtern zu ZIP-Dateien

Das Hinzufügen von Passwörtern zu ZIP-Dateien ist einfach. Verwenden Sie die Option -e (encrypt) und Sie werden aufgefordert, Ihr Passwort einzugeben und es zur Überprüfung erneut einzugeben.

zip -e -r -q source_code work/

So entpacken Sie eine ZIP-Datei mit dem unzip-Befehl

Um die Dateien aus einer ZIP-Datei zu extrahieren, verwenden Sie den Befehl unzip und geben Sie den Namen der ZIP-Datei an. Beachten Sie, dass Sie die Erweiterung „.zip“ angeben müssen.

unzip source_code.zip

Wenn die Dateien extrahiert werden, werden sie im Terminalfenster aufgelistet.

ZIP-Dateien enthalten keine Details zum Dateieigentum. Für alle extrahierten Dateien ist der Besitzer auf den Benutzer festgelegt, der sie extrahiert.

Genau wie zip verfügt auch unzip über die Option -q (leise), sodass Sie die Dateiliste beim Extrahieren der Dateien nicht sehen müssen.

unzip -q source_code.zip

Extrahieren von Dateien in ein Zielverzeichnis

Um die Dateien in ein bestimmtes Verzeichnis entpacken zu lassen, verwenden Sie die Option -d (Verzeichnis) und geben Sie den Pfad zu dem Verzeichnis an, in das das Archiv entpackt werden soll.

unzip -q source_code.zip -d ./development

Extrahieren Sie passwortgeschützte ZIP-Dateien

Wenn eine ZIP-Datei mit einem Passwort erstellt wurde, werden Sie von unzip nach dem Passwort gefragt. Wenn Sie nicht das richtige Kennwort angeben, werden die Dateien nicht entpackt.

unzip -q source_code.zip

Wenn es Ihnen egal ist, dass Ihr Passwort von anderen gesehen wird – oder dass es in Ihrem Befehlsverlauf gespeichert wird – können Sie das Passwort in der Befehlszeile mit der Option -P (Passwort) angeben. (Sie müssen ein großes „P“ verwenden.)

unzip -P fifty.treacle.cutlass -q source_code.zip

Ausschließen von Dateien

Wenn Sie eine bestimmte Datei oder Dateigruppe nicht extrahieren möchten, verwenden Sie die Option -x (ausschließen). In diesem Beispiel möchten wir alle Dateien extrahieren, mit Ausnahme der Dateien mit der Endung „.h“.

unzip -q source_code.zip -x *.h

Überschreiben von Dateien

Angenommen, Sie haben ein Archiv extrahiert, aber einige der extrahierten Dateien versehentlich gelöscht.

  So bearbeiten Sie Untertitel in Filmen unter Linux mit Aegisub

Eine schnelle Lösung dafür wäre, die Dateien noch einmal zu extrahieren. Wenn Sie jedoch versuchen, die ZIP-Datei in dasselbe Verzeichnis wie zuvor zu entpacken, werden Sie beim Entpacken aufgefordert, eine Entscheidung zum Überschreiben der Dateien zu treffen. Es wird eine der folgenden Antworten erwartet.

Abgesehen von der Antwort r (Umbenennen) muss bei diesen Antworten die Groß-/Kleinschreibung beachtet werden.

y: Ja, diese Datei überschreiben
n: Nein, diese Datei nicht überschreiben
A: Alle, überschreibe alle Dateien
N: Keine, überschreibe keine der Dateien
r: Umbenennen, extrahieren Sie diese Datei, aber geben Sie ihr einen neuen Namen. Sie werden nach einem neuen Namen gefragt.

Um das Entpacken zu erzwingen, um vorhandene Dateien zu überschreiben, verwenden Sie die Option -o (überschreiben).

unzip -o -q source_code.zip

Der effizienteste Weg, die fehlenden Dateien zu ersetzen, besteht darin, beim Entpacken nur alle Dateien im Archiv zu extrahieren, die sich nicht im Zielverzeichnis befinden. Verwenden Sie dazu die Option -n (nie überschreiben).

unzip -n source_code.zip

Blick in eine ZIP-Datei

Es ist oft nützlich und lehrreich, eine Liste der Dateien in einer ZIP-Datei anzuzeigen, bevor Sie sie extrahieren. Dies können Sie mit der Option -l (Listenarchiv) tun. Es wird durch weniger geleitet, um die Ausgabe überschaubar zu machen.

unzip -l source_code.zip | less

Die Ausgabe zeigt die Verzeichnisse und Dateien innerhalb der ZIP-Datei, deren Länge sowie Datum und Uhrzeit der Aufnahme in das Archiv. Drücken Sie „q“, um mit weniger zu beenden.

Es gibt andere Möglichkeiten, einen Blick in eine ZIP-Datei zu werfen, die unterschiedliche Arten von Informationen enthalten, wie wir sehen werden.

Fügen Sie ein Passwort mit dem zipcloak-Befehl hinzu

Wenn Sie eine ZIP-Datei erstellt, aber vergessen haben, ein Passwort hinzuzufügen, was können Sie tun? Mit dem Befehl zipcloak können Sie der ZIP-Datei schnell ein Kennwort hinzufügen. Übergeben Sie den Namen der ZIP-Datei in der Befehlszeile. Sie werden nach einem Passwort gefragt. Sie müssen das Passwort durch eine zweite Eingabe verifizieren.

zipcloak source_code.zip

Dateidetails anzeigen mit dem zipdetails-Befehl

Der Befehl zipdetails zeigt Ihnen viele Informationen zur ZIP-Datei an. Der einzig sinnvolle Weg, die Ausgabemenge dieses Befehls zu handhaben, besteht darin, ihn durch weniger zu leiten.

zipdetails source_code.zip | less

Beachten Sie, dass die Informationen auch dann Dateinamen enthalten, wenn die ZIP-Datei passwortgeschützt ist. Diese Art von Informationen wird in der ZIP-Datei als Metadaten gespeichert und ist nicht Teil der verschlüsselten Daten.

  Wie man Deadcore unter Linux spielt

Durchsuchen Sie die Datei mit dem zipgrep-Befehl

Mit dem Befehl zipgrep können Sie innerhalb der Dateien in einer ZIP-Datei suchen. Im folgenden Beispiel wollen wir wissen, welche Dateien innerhalb der ZIP-Datei den Text „keyval.h“ enthalten.

zipgrep keyval.h source_code.zip

Wir können sehen, dass die Dateien slang.c und getval.c die Zeichenfolge „keyval.h“ enthalten. Wir können auch sehen, dass es zwei Kopien dieser Dateien in verschiedenen Verzeichnissen in der ZIP-Datei gibt.

Informationen mit dem zipinfo-Befehl anzeigen

Der Befehl zipinfo bietet Ihnen eine weitere Möglichkeit, in eine ZIP-Datei zu schauen. Wie zuvor leiten wir die Ausgabe durch weniger.

zipinfo source_code.zip | less

Die Ausgabe zeigt von links nach rechts:

Die Dateiberechtigungen
Die Version des Tools, das zum Erstellen der ZIP-Datei verwendet wurde
Die ursprüngliche Dateigröße
Ein Dateideskriptor (unten beschrieben)
Die Kompressionsmethode (in diesem Fall Deflation)
Der Daten- und Zeitstempel
Der Name der Datei und eines beliebigen Verzeichnisses

Der Dateideskriptor besteht aus zwei Zeichen. Das erste Zeichen ist ein „t“ oder ein „b“, um eine Text- oder Binärdatei anzuzeigen. Wenn es sich um einen Großbuchstaben handelt, wird die Datei verschlüsselt. Das zweite Zeichen kann eines von vier Zeichen sein. Dieses Zeichen stellt dar, welche Art von Metadaten für diese Datei enthalten sind: keine, ein erweiterter lokaler Header, ein „zusätzliches Feld“ oder beides.

-: Wenn keines von beiden vorhanden ist, ist das Zeichen ein Bindestrich
l: wenn es einen erweiterten lokalen Header gibt, aber kein zusätzliches Feld
x: wenn kein erweiterter lokaler Header, aber ein zusätzliches Feld vorhanden ist
X: wenn es einen erweiterten lokalen Header und ein zusätzliches Feld gibt

Teilen Sie die Datei mit dem zipsplit-Befehl

Wenn Sie die ZIP-Datei an eine andere Person senden müssen, es jedoch Größenbeschränkungen oder Probleme bei der Übertragung der Datei gibt, können Sie den Befehl zipsplit verwenden, um die ursprüngliche ZIP-Datei in mehrere kleinere ZIP-Dateien aufzuteilen.

Mit der Option -n (Größe) können Sie eine maximale Größe für jede der neuen ZIP-Dateien festlegen. In diesem Beispiel teilen wir die Datei source_code.zip auf. Wir möchten, dass keine der neuen ZIP-Dateien größer als 100 KB (102400 Byte) ist.

zipsplit -n 102400 source_code.zip

Die von Ihnen gewählte Größe darf nicht kleiner sein als die Größe einer der Dateien in der ZIP-Datei.

Mit diesen Befehlen können Sie Ihre eigenen ZIP-Dateien erstellen, erhaltene ZIP-Dateien entpacken und verschiedene andere Operationen damit ausführen, ohne jemals das Linux-Terminal verlassen zu müssen.