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) ?
Réponses
Trop de publicités?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 )
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 ?
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.
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.
- Réponses précédentes
- Plus de réponses