Come sovrascrivere il file zip esistente invece di aggiornarlo in Info-Zip?


30

Per ottenere un nuovo file zip proprio come fa tar, devo eseguire rm foo.zipprima di eseguire 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

Risposte:


32

Utilizzare l'opzione -FS per "sincronizzare i file"

zip -FSr foo.zip foo

Ciò aggiungerà tutti i nuovi file nella cartella allo zip ed eliminerà tutti i file dallo zip che non sono nella cartella.


Quale versione di zip ha questa opzione? Il mio comando zip non riconosce "-S"
Jayan il

2
L'interruttore -FSnon è -Fe -Sinsieme. Questo è stato lì almeno da zip 3.0. Controllare man zip.
Paul,

Come viene definito il "nuovo file"? Le sue dimensioni del file cambiano, la data è stata modificata, entrambe? Solo curioso
Moseleyi

Funziona Zip 3.0e non funziona Zip 2.32(non ha rimosso i vecchi file nel pacchetto zip)
Nabi KAZ,

Intendi -FS -rvero?
valanga1

0

Un'alternativa all'utilizzo -FSdell'opzione (o all'eliminazione del vecchio file ZIP) e alla sovrascrittura letterale del file ZIP esistente è quella di chiedere zipl'output su stdin e reindirizzare l'output sul file desiderato:

zip -r - foo >foo.zip

Se esiste foo.zip, verrà sovrascritto dal reindirizzamento della shell, il che significa che otterrai un nuovo file ZIP nuovo al 100% delle volte, ogni volta 🙂


Intendi l'uscita su stdout
flarn2006,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.