Est-il possible de remplacer un fichier dans un fichier Zip sans décompresser l’ancien fichier en ajoutant le nouveau fichier et en le rempotant?
La raison est que j'ai un fichier Zip qui est vraiment gros, il y a un xml à l'intérieur du fichier Zip que je dois mettre à jour de temps en temps. Décompresser le zip et le décompresser prend beaucoup de temps. Je voudrais donc pouvoir simplement remplacer le XML dans le zip par un script. J'ai déjà ce chèques pour les mises à jour sur le xml que j'ai.
Alors, est-il possible de simplement remplacer le fichier XML sans décompresser ni reripper?
Désolé, je voudrais utiliser la commande Zip pour faire des choses comme ça, mais le problème est que le script est en fait pour un Android téléphone et Zip n'est pas une commande que je peux utiliser malheureusement désolé j'ai laissé cela de côté. Je ont utilisé Zip définitivement si je pouvais mais je n'ai que décompresser pour droid et puis il y a du goudron dans busybox mais le goudron ne fait pas ce dont j'ai besoin
De Zip (1) :
Lorsqu'il reçoit le nom d'une archive Zip existante, Zip remplacera les entrées portant le même nom dans l'archive Zip ou ajoutera des entrées pour les nouveaux noms.
Utilisez donc la commande Zip
comme vous le feriez normalement pour créer un nouveau fichier .Zip ne contenant que ce fichier, à l’exception du nom de fichier .Zip que vous spécifiez, il s’agira de l’archive existante.
J'ai trouvé le fichier Linux Zip
lourd pour remplacer un seul fichier dans un fichier Zip. L’utilitaire jar
du Java Kit de développement peut être plus facile. Considérez la tâche courante de mettre à jour WEB/web.xml
dans un fichier JAR (qui est juste un fichier Zip):
jar -uf path/to/myapp.jar -C path/to/dir WEB-INF/web.xml
Ici, path/to/dir
est le chemin d’un répertoire contenant le WEB-INF
répertoire (qui contient lui-même web.xml
).
Essayez ce qui suit:
Zip [zipfile] [file to update]
Un exemple:
$ Zip test.Zip test/test.txt
updating: test/test.txt (stored 0%)
Je sais que c'est une vieille question, mais je voulais faire la même chose. Mettre à jour un fichier dans l'archive Zip. Et aucune des réponses ci-dessus ne m'a vraiment aidé.
Voici ce que j'ai fait. Répertoire temporaire créé abc
. Copié file.Zip
à abc
et a extrait le fichier dans ce répertoire. J'ai édité le fichier que je voulais éditer. Puis, tout en étant dans abc
, exécutez la commande suivante
user@Host ~/temp/abc $ Zip -u file.Zip
updating: content/js/ (stored 0%)
updating: content/js/moduleConfig.js (deflated 69%)
-u
_ switch recherchera les fichiers modifiés/nouveaux et les ajoutera à l’archive Zip.
Utilisez le drapeau de mise à jour: -u
Exemple:
Zip -ur existing.Zip myFolder
Cette commande va compresser et ajouter myFolder
(et son contenu) au existing.Zip
.
tilisation avancée:
L’indicateur de mise à jour compare les fichiers entrants aux fichiers existants et ajoute de nouveaux fichiers ou met à jour ceux existants.
Par conséquent, si vous souhaitez ajouter/mettre à jour un sous-répertoire spécifique dans le fichier Zip, il suffit de mettre à jour la source comme vous le souhaitez, puis de compresser de nouveau la source avec le fichier -u
drapeau. Seuls les fichiers modifiés seront compressés.
Si vous n’avez pas accès aux fichiers source, vous pouvez décompresser le fichier Zip, puis mettre à jour les fichiers souhaités, puis réextraire avec le fichier -u
drapeau. Encore une fois, seuls les fichiers modifiés seront compressés.
Exemple:
structure source originale
ParentDir
├── file1.txt
├── file2.txt
├── ChildDir
│ ├── file3.txt
│ ├── Logs
│ │ ├── logs1.txt
│ │ ├── logs2.txt
│ │ ├── logs3.txt
Structure source mise à jour
ParentDir
├── file1.txt
├── file2.txt
├── ChildDir
│ ├── file3.txt
│ ├── Logs
│ │ ├── logs1.txt
│ │ ├── logs2.txt
│ │ ├── logs3.txt
│ │ ├── logs4.txt <-- NEW FILE
tilisation
$ Zip -ur existing.Zip ParentDir
> updating: ParentDir/ChildDir/Logs (stored 0%)
> adding: ParentDir/ChildDir/Logs/logs4.txt (stored 96%)
Vous pouvez utiliser: Zip -u file.zip path/file_to_update
Il y a aussi l'option -f qui rafraîchira le fichier Zip. Il peut être utilisé pour mettre à jour TOUS les fichiers mis à jour depuis la création du fichier Zip (en supposant qu'ils se trouvent au même endroit dans la structure arborescente du fichier Zip).
Si votre fichier s'appelle /myfiles/myzip.Zip, tout ce que vous avez à faire est
Zip -f /myfiles/myzip.Zip
7Zip
(7za) peut être utilisé pour ajouter/mettre à jour joliment des fichiers/répertoires:
Exemple: Remplacement (quelle que soit la date du fichier) du fichier MANIFEST.MF
Dans un fichier JAR. Le répertoire /source/META-INF
Contient le fichier MANIFEST.MF
À placer dans le fichier jar
(Zip):
7za a /tmp/file.jar /source/META-INF/
Seulement mettre à jour (ne remplace pas la cible si la source est plus ancienne)
7za u /tmp/file.jar /source/META-INF/
Du côté de la structure d'archive Zip - vous pouvez mettre à jour le fichier Zip sans le recompresser, il vous suffira d'ignorer tous les fichiers antérieurs au fichier que vous devez remplacer, puis de placer votre fichier mis à jour, puis le reste des fichiers. Et enfin, vous aurez besoin de mettre la structure de répertoires centrale mise à jour. Cependant, je doute que les outils les plus courants vous permettent de le faire.