Comment écraser un fichier zip existant au lieu de le mettre à jour dans Info-Zip?

30

Pour obtenir un nouveau fichier zip comme le fait tar, dois-je effectuer rm foo.zipavant d'exécuter 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
un sari
la source

Réponses:

32

Utilisez l'option -FS pour "synchroniser les fichiers"

zip -FSr foo.zip foo

Cela ajoutera tous les nouveaux fichiers du dossier au zip et supprimera tous les fichiers du zip qui ne se trouvent pas dans le dossier.

Paul
la source
Quelle version de zip a cette option? Ma commande zip ne reconnaît pas "-S"
Jayan
2
Le commutateur n'est -FSpas -Fet -Sensemble. Cela existe depuis zip 3.0 au moins. Vérifiez man zip.
Paul
Comment est défini le "nouveau fichier"? Ses changements de taille de fichier, la date de modification, les deux? Juste curieux
Moseleyi
Cela fonctionne Zip 3.0et ne fonctionne pas Zip 2.32(n'a pas supprimé les anciens fichiers du pack zip)
Nabi KAZ
Tu veux dire -FS -r, non?
avalanche1
0

Une alternative à l'utilisation de l' -FSoption (ou à la suppression de l'ancien fichier ZIP), et écraser littéralement le fichier ZIP existant, consiste à demander zipà sortir vers stdin et à rediriger la sortie vers le fichier de votre choix:

zip -r - foo >foo.zip

Si foo.zip existe, il sera écrasé par la redirection du shell, ce qui signifie que vous obtiendrez un nouveau fichier ZIP neuf 100% du temps, à chaque fois 🙂

mxxk
la source
Vous voulez dire la sortie vers stdout
flarn2006