web-dev-qa-db-fra.com

Est-il possible d'éditer des fichiers à l'intérieur d'un fichier Zip sans les extraire explicitement au préalable?

Je dois parfois modifier un fichier .Zip ou .jar. Je déplace donc généralement le fichier vers /tmp, extrait tous les fichiers avec unzip, édite quelques fichiers, puis re-compresse les fichiers. Cela fonctionne, mais cela peut être fastidieux. Existe-t-il un utilitaire ou un script Shell que je puisse utiliser pour modifier un fichier dans un fichier Zip sans appeler explicitement unzip et Zip (même s'il ne s'agit que d'un wrapper autour de ces commandes)?

42
austin

Connaissez-vous le nom du fichier dans l’archive avant de le décompresser? Vous pouvez créer une fonction pour décompresser en /tmp, éditer et actualiser le zip:

zipedit(){
    echo "Usage: zipedit archive.Zip file.txt"
    unzip "$1" "$2" -d /tmp 
    vi /tmp/$2 && Zip -j --update "$1"  "/tmp/$2" 
}

Comme il est dit, l’utilisation est:

zipedit myarchive.Zip myfile.txt

Cela décompresse le fichier nommé de l’archive, l’enregistre dans /tmp, le édite dans vi puis le rajoute à l’archive tout en "jonglant" le chemin. Ajoutez à votre .bash_profile, en supposant que bash...

EDIT: Vous trouverez ci-dessous une version qui fonctionne avec les sous-dossiers de l'archive ... Remarque, n'utilisez pas de barre oblique avant le nom du dossier (c'est-à-dire myfolder/file.txt pas /myfolder/file.txt). Si vous éditez un fichier qui n'existait pas déjà dans l'archive, il le créera pour vous. Aussi pas sûr si cela fonctionnera avec le chemin absolu du fichier Zip. Meilleur bâton avec un parent.

zipedit(){
    echo "Usage: zipedit archive.Zip folder/file.txt"
    curdir=$(pwd)
    unzip "$1" "$2" -d /tmp 
    cd /tmp
    vi "$2" && Zip --update "$curdir/$1"  "$2" 
    # remove this line to just keep overwriting files in /tmp
    rm -f "$2" # or remove -f if you want to confirm
    cd "$curdir"
}

Merci pour la question. Je vais probablement finir par utiliser celui-ci aussi!

Une autre modification: non testée, mais j'ai lu que vim et emacs modifieront-ils les fichiers jar directement?

19
beroe

Vim prend en charge l’édition transparente de fichiers au sein de fichiers Zip. Il suffit d'exécuter:

vim file.Zip

et vous verrez une liste de fichiers dans l'archive Zip. Choisissez celui que vous voulez éditer, changez ce que vous voulez et quittez avec: x

Si vim répond avec:

Impossible d'apporter des modifications, 'modifiable' est désactivé

..il suffit d'exécuter :set modifiable ou :set ma (source: https://stackoverflow.com/questions/5745506/vim-modifiable-is-off )

54
jesjimher

Réponse courte: NON.

Si c'est un wrapper, vous appelez ces commandes. Quoi qu'il en soit, le mieux que je puisse faire est d'ouvrir le fichier en utilisant file-roller, si vous êtes dans un environnement X, cela pourrait fonctionner avec un simple double clic, selon votre configuration. Vous pouvez ensuite double-cliquer sur le fichier compressé pour l'ouvrir puis vous pouvez l'éditer:

$ file-roller b3.Zip 

Lorsque vous enregistrez votre fichier modifié, vous devriez obtenir cette boîte de dialogue:

Vous pouvez également créer un script pour cela, mais cela devient compliqué si vous avez des archives compressées contenant plusieurs fichiers. Faites-moi savoir si c'est ce dont vous avez besoin et je pourrais peut-être cuisiner quelque chose.

enter image description here

4
terdon

Courte réponse pédante; non. Si vous songez à la compression, vous utilisez la redondance pour raccourcir les fichiers, de sorte que toute modification modifie l’ensemble du fichier dans l’archive, éventuellement l’archive.

Si vous êtes moins théorique, plus pratique, plus "Je ne veux pas avoir à décompresser/Zip manuellement", il existe des outils que vous pouvez utiliser. ark sur Linux est celui que j'ai utilisé. Vous pouvez également monter l'archive avec Fuse-Zip , bien que ce soit probablement plus de travail qu'un fichier temporaire.

0
Rich Homolka

J'ai écrit un plugin Vim qui étend le stock Zip.vim pour parcourir et éditer des fichiers Zip imbriqués.

https://github.com/lbrayner/vim-rzip

0
lbrayner

Selon la page de manuel relative à Zip (version en ligne pour faciliter la consultation: http://linux.die.net/man/1/Zip ), La commande Zip a un drapeau -u qu'elle décrit comme suit:

Remplacez (mettez à jour) une entrée existante dans l'archive Zip uniquement si elle a été modifiée plus récemment que la version déjà présente dans l'archive Zip.

0
Proctor

Le gestionnaire de fichiers Directory Opus 12 vous permettra de parcourir le fichier Zip, puis de glisser-déposer le fichier édité depuis un autre dossier vers celui-ci, d’écraser le fichier que vous souhaitez éditer. Très facile

0
Technometry

Vous pouvez utiliser l'éditeur de texte KDE standard, par exemple:

  1. archive ouverte dans le gestionnaire d'archives
  2. ouvrir un fichier texte dans l'éditeur KDE gui
  3. enregistrer le fichier texte et le système vous demandent d'actualiser l'archive - cliquez sur oui
  4. n'oubliez pas la permission pour archive et le dossier d'archive (mon erreur préférée)
0
tvorez