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

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.


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 🙂


Vous voulez dire la sortie vers stdout
flarn2006
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.