70 votes

Existe-t-il un moyen d'éditer des fichiers à l'intérieur d'un fichier zip sans les extraire explicitement au préalable ?

Il m'arrive parfois de devoir modifier un fichier .zip ou .jar, et je le déplace alors généralement vers /tmp extraire tous les fichiers avec unzip modifier quelques fichiers, et ensuite ré-assembler les fichiers. Cela fonctionne, mais peut être fastidieux. Existe-t-il un utilitaire ou Shell Shell que je puisse utiliser pour éditer un fichier à l'intérieur d'un fichier zip sans appeler explicitement unzip y zip (même s'il ne s'agit que d'une enveloppe autour de ces commandes) ?

84voto

jesjimher Points 870

Vim prend en charge l'édition transparente des fichiers à l'intérieur des fichiers zip. Il suffit d'exécuter :

vim file.zip

et vous verrez apparaître une liste des fichiers contenus dans l'archive zip. Choisissez celui que vous voulez modifier, changez ce que vous voulez, et quittez avec :x

Si vim répond avec :

Impossible d'effectuer des modifications, le paramètre "modifiable" est désactivé.

juste courir :set modifiable o :set ma (source : https://stackoverflow.com/questions/5745506/vim-modifiable-is-off )

24voto

beroe Points 1057

Connaissez-vous le nom du fichier dans l'archive avant de la décompresser ? Vous pourriez créer une fonction de décompression vers /tmp , modifier et rafraîchir 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'usage est :

zipedit myarchive.zip myfile.txt

Cette opération décompacte le fichier nommé de l'archive, l'enregistre dans le répertoire /tmp et l'édite dans vi puis le rajoute à l'archive, tout en "nettoyant" le chemin. Ajoutez à votre .bash_profile, en supposant que bash ...

EDITAR: Voici une version qui fonctionne avec des sous-dossiers à l'intérieur de l'archive... Note, n'utilisez pas de barre oblique avant le nom du dossier (c'est-à-dire utilisez myfolder/file.txt no /myfolder/file.txt ). Si vous modifiez un fichier qui n'existe pas encore dans l'archive, il le créera pour vous. Je ne sais pas non plus s'il fonctionnera avec le chemin absolu du fichier zip. Il vaut mieux utiliser un chemin relatif.

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 finirai probablement par utiliser celle-ci aussi !

Autre édition : non testé, mais j'ai lu que vim y emacs vont-ils tous deux éditer directement les fichiers jar ?

6voto

Mohsin Points 11

Réponse courte : NON.

Si c'est un wrapper, vous sont en appelant 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 peut fonctionner avec un simple double-clic, en fonction de votre configuration. Vous pouvez ensuite double-cliquer sur le fichier compressé pour l'ouvrir et le modifier :

$ file-roller b3.zip 

Lorsque vous enregistrez votre fichier modifié, vous devriez obtenir ce dialogue :

Vous pourriez faire un script pour cela aussi, mais cela devient compliqué si vous avez des archives compressées qui contiennent plusieurs fichiers. Faites-moi savoir si c'est ce dont vous avez besoin et je pourrais être en mesure de préparer quelque chose.

enter image description here

3voto

Lark Points 1640

Si vous pensez à la compression, vous utilisez la redondance pour raccourcir les fichiers à l'intérieur, donc toute modification change l'ensemble du fichier dans l'archive, voire l'archive.

Si vous êtes moins théorique, plus pratique, plus "je ne veux pas avoir à dézipper/zipper manuellement", il existe des outils que vous pouvez utiliser. arche sur Linux en est un que j'ai utilisé. Vous pouvez également monter l'archive avec fusible-zip mais cela représente probablement plus de travail qu'un fichier temporaire.

1voto

Technometry Points 11

Le gestionnaire de fichiers de Directory Opus 12 vous permettra de parcourir le fichier Zip, puis de faire glisser et de déposer le fichier modifié d'un autre dossier dans celui-ci et d'écraser le fichier que vous voulez modifier, et il fera tout cela à la volée. Très facile

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X