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
ein Sari
quelle

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.

Paul
quelle
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 🙂

mxxk
quelle
Du meinst Ausgabe auf stdout
flarn2006