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.