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.