Wie überschreibe ich eine vorhandene Zip-Datei, anstatt sie in Info-Zip zu aktualisieren?


30

Muss ich rm foo.zipvor der Ausführung eine neue Zip-Datei erstellen, um wie bei tar eine neue Zip-Datei zu erhalten zip?

$ mkdir foo; touch foo/bar
$ zip -r foo.zip foo
  adding: foo/ (stored 0%)
  adding: foo/bar (stored 0%)
$ rm foo/bar; touch foo/baz
$ zip -r foo.zip foo
  adding: foo/ (stored 0%)
  adding: foo/baz (stored 0%)
$ unzip -l foo.zip
Archive:  foo.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2011-10-27 07:49   foo/
        0  2011-10-27 07:49   foo/bar
        0  2011-10-27 07:49   foo/baz
---------                     -------
        0                     3 files

Antworten:


32

Verwenden Sie die Option -FS, um die Datei zu synchronisieren.

zip -FSr foo.zip foo

Dadurch werden alle neuen Dateien im Ordner zur ZIP-Datei hinzugefügt und alle Dateien aus der ZIP-Datei gelöscht, die sich nicht im Ordner befinden.


Welche Version von zip hat diese Option? Mein zip-Befehl erkennt "-S" nicht
— Jayan

2
Der Schalter ist -FSnicht -Fund -Szusammen. Das gibt es seit Zip 3.0 zumindest. Überprüfen Sie man zip.
— Paul

Wie wird "neue Datei" definiert? Änderungen der Dateigröße, Änderungsdatum, beides? Nur neugierig
— Moseleyi

Dies funktioniert nur für Zip 3.0und funktioniert nicht für Zip 2.32(hat keine alten Dateien im Zip-Pack entfernt)
— Nabi KAZ

Du meinst -FS -r, richtig?
— avalanche1

0

Eine Alternative zur Verwendung der -FSOption (oder zum Löschen der alten ZIP-Datei) und zum buchstäblichen Überschreiben der vorhandenen ZIP-Datei besteht darin, zipdie Ausgabe an stdin zu senden und die Ausgabe in die Datei Ihrer Wahl umzuleiten:

zip -r - foo >foo.zip

Wenn foo.zip vorhanden ist, wird es durch die Shell-Umleitung überschrieben, was bedeutet, dass Sie jedes Mal zu 100% eine neue ZIP-Datei erhalten 🙂


Du meinst Ausgabe auf stdout
— flarn2006
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.