# zip — ZIP-Archive erstellen und entpacken

> Praxis-Guide zu zip und unzip: ZIP-Archive erstellen, entpacken, komprimieren und filtern – das universellste Archivformat über alle Betriebssysteme.

Source: https://www.jpkc.com/db/cheatsheets/archives/zip/

<!-- PROSE:intro -->
zip und unzip sind die Klassiker für das ZIP-Format – das einzige Archivformat, das du praktisch überall öffnen kannst, von Windows über macOS bis Linux. Mit `zip` packst und komprimierst du Dateien in einem Schritt, mit `unzip` holst du sie wieder heraus. Dieser Guide zeigt dir die wichtigsten Befehle für den Alltag: rekursives Packen, Komprimierungsstufen, Ausschluss-Muster, Verschlüsselung und das gezielte Entpacken einzelner Dateien.
<!-- PROSE:intro:end -->

## Archive erstellen

`zip <archive>.zip <files>` — Erstellt ein ZIP-Archiv aus einzelnen Dateien.

```bash
zip backup.zip file1.txt file2.txt
```

`zip -r <archive>.zip <dir>` — Erstellt ein ZIP-Archiv aus einem Verzeichnis (rekursiv).

```bash
zip -r project.zip project/
```

`zip -j <archive>.zip <files>` — Erstellt ein Archiv ohne Verzeichnispfade (Pfade verwerfen).

```bash
zip -j flat.zip path/to/file1.txt path/to/file2.txt
```

`zip -<level> <archive>.zip <files>` — Legt die Komprimierungsstufe fest (0=speichern, 1=schnellste, 9=beste).

```bash
zip -9 best.zip largefile.dat
```

`zip -0 <archive>.zip <files>` — Speichert Dateien ohne Komprimierung (schneller bei bereits komprimierten Daten).

```bash
zip -0 images.zip *.jpg
```

## Hinzufügen, Aktualisieren & Löschen

`zip -u <archive>.zip <files>` — Aktualisieren: fügt neue oder geänderte Dateien zu einem bestehenden Archiv hinzu.

```bash
zip -u backup.zip newfile.txt
```

`zip -d <archive>.zip <files>` — Löscht Dateien aus einem bestehenden Archiv.

```bash
zip -d backup.zip oldfile.txt
```

`zip -g <archive>.zip <files>` — Anhängen (grow): hängt Dateien an ein bestehendes Archiv an.

```bash
zip -g backup.zip extra.txt
```

## Ausschließen & Filtern

`zip -r <archive>.zip <dir> -x '<pattern>'` — Erstellt ein Archiv und schließt Dateien aus, die auf ein Muster passen.

```bash
zip -r project.zip project/ -x '*.git*' '*node_modules*'
```

`zip -r <archive>.zip <dir> -x '*.log' '*.tmp'` — Schließt mehrere Dateimuster aus.

```bash
zip -r deploy.zip src/ -x '*.log' '*.tmp' '*.test.js'
```

`zip -r <archive>.zip <dir> -i '*.php' '*.html'` — Nimmt nur Dateien auf, die auf die Muster passen.

```bash
zip -r code.zip project/ -i '*.php' '*.html' '*.css'
```

## Verschlüsselung & Aufteilen

`zip -e <archive>.zip <files>` — Erstellt ein passwortgeschütztes ZIP-Archiv (fragt das Passwort interaktiv ab).

```bash
zip -e -r secret.zip confidential/
```

`zip -P '<password>' <archive>.zip <files>` — Erstellt ein verschlüsseltes Archiv mit Passwort direkt auf der Kommandozeile (landet unsicher in der Shell-History).

```bash
zip -P 'mypass' secret.zip file.txt
```

`zip -s <size> -r <archive>.zip <dir>` — Erstellt ein aufgeteiltes Archiv (mehrteilig).

```bash
zip -s 100m -r large.zip bigfolder/
```

## unzip — Entpacken

`unzip <archive>.zip` — Entpackt alle Dateien aus einem ZIP-Archiv.

```bash
unzip backup.zip
```

`unzip <archive>.zip -d <dir>` — Entpackt in ein bestimmtes Verzeichnis.

```bash
unzip backup.zip -d /tmp/restore/
```

`unzip <archive>.zip '<file>'` — Entpackt nur bestimmte Dateien.

```bash
unzip backup.zip 'config.yaml'
```

`unzip -o <archive>.zip` — Überschreibt vorhandene Dateien ohne Nachfrage.

```bash
unzip -o update.zip -d /var/www/
```

`unzip -n <archive>.zip` — Überschreibt vorhandene Dateien niemals.

```bash
unzip -n backup.zip
```

`unzip -l <archive>.zip` — Listet den Inhalt eines ZIP-Archivs auf, ohne zu entpacken.

```bash
unzip -l backup.zip
```

`unzip -t <archive>.zip` — Prüft die Integrität des Archivs, ohne zu entpacken.

```bash
unzip -t backup.zip
```

`unzip -p <archive>.zip '<file>'` — Entpackt eine Datei nach stdout (an einen anderen Befehl weiterleiten).

```bash
unzip -p backup.zip config.json | jq .
```

<!-- PROSE:outro -->
## Fazit

Das ZIP-Format glänzt vor allem durch seine Allgegenwart: Wer ein Archiv plattformübergreifend weitergeben will, liegt mit `zip` fast nie falsch. Verlass dich aber nicht auf die eingebaute Verschlüsselung – das klassische ZipCrypto-Verfahren (`zip -e`, `zip -P`) gilt als schwach und leicht zu brechen, und `-P` schreibt dein Passwort obendrein in die Shell-History. Für echte Vertraulichkeit greifst du besser zu AES-fähigen Werkzeugen wie 7-Zip oder zu age bzw. GPG.

## Weiterführende Links

- [Info-ZIP – offizielle Projektseite](http://www.info-zip.org/) – Heimat von zip und unzip, mit Dokumentation und Quellcode (englisch)
- [zip(1) – Linux man-page](https://linux.die.net/man/1/zip) – vollständige Optionsreferenz zum zip-Befehl (englisch)
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [7z](https://www.jpkc.com/db/cheatsheets/archives/7z/) – Hochkompressions-Archivierer mit starker AES-256-Verschlüsselung
- [gzip](https://www.jpkc.com/db/cheatsheets/archives/gzip/) – schnelle Stream-Komprimierung für einzelne Dateien
- [tar](https://www.jpkc.com/db/cheatsheets/archives/tar/) – bündelt Verzeichnisbäume zu einem Archiv (oft mit gzip kombiniert)

