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

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.


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 🙂


Masz na myśli wyjście do wyjścia
flarn2006
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.