Jak zastąpić istniejący plik zip zamiast aktualizować go w Info-Zip?

30

Aby uzyskać nowy plik zip, podobnie jak tar, czy muszę wykonać rm foo.zipprzed uruchomieniem 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
asari
źródło

Odpowiedzi:

32

Użyj opcji -FS, aby „zsynchronizować pliki”

zip -FSr foo.zip foo

Spowoduje to dodanie nowych plików z folderu do pliku zip i usunięcie wszystkich plików z pliku zip, których nie ma w folderze.

Paweł
źródło
Która wersja zip ma tę opcję? Moje polecenie zip nie rozpoznaje „-S”
Jayan
2
Przełącznik -FSnie jest -Fi -Srazem. Tak było od co najmniej zip 3.0. Sprawdzić man zip.
Paul
Jak definiuje się „nowy plik”? Zmiany rozmiaru pliku, data modyfikacji, oba? Po prostu ciekawy
Moseleyi
To po prostu działa Zip 3.0i nie działa Zip 2.32(nie usuwa starych plików w pakiecie zip)
Nabi KAZ
Masz na myśli -FS -r, prawda?
lawina 1
0

Alternatywą dla skorzystania z -FSopcji (lub usunięcia starego pliku ZIP) i dosłownie zastąpienia istniejącego pliku ZIP jest poproszenie zipo wyjście na standardowe wejście i przekierowanie wyjścia do wybranego pliku:

zip -r - foo >foo.zip

Jeśli plik foo.zip istnieje, zostanie zastąpiony przekierowaniem powłoki, co oznacza, że ​​za każdym razem otrzymasz 100% nowego pliku ZIP 🙂

mxxk
źródło
Masz na myśli wyjście do wyjścia
flarn2006