web-dev-qa-db-ja.com

明示的に抽出しないでZipファイル内のファイルを編集する方法はありますか?

.zipや.jarファイルに変更を加える必要がある場合があるので、通常はそのファイルを/tmpに移動し、すべてのファイルをunzipで抽出し、いくつかのファイルを編集してから、ファイルを再圧縮します。これはうまくいきますが、それは面倒です。明示的にunzipZipを呼び出さずにZipファイル内のファイルを編集するために使用できるユーティリティまたはシェルスクリプトはありますか(たとえこれらのコマンドの単なるラッパーであっても)。

42
austin

解凍する前に、アーカイブ内のファイルの名前を知っていますか? /tmpに解凍し、Zipを編集して更新する関数を作成できます。

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

それが言うように、使用法は次のとおりです。

zipedit myarchive.Zip myfile.txt

これは、指定されたファイルをアーカイブから解凍し、それを/tmpに保存し、それをviに編集してから、パスを "junking"しながらアーカイブに追加します。 bash...と仮定して、あなたの.bash_profileに追加してください。

EDIT:以下はアーカイブ内のサブフォルダを扱うバージョンです。フォルダ名の前にスラッシュを使わないでください(すなわちuse myfolder/file.txt/myfolder/file.txtではありません。アーカイブにまだ存在していないファイルを編集した場合は、それが自動的に作成されます。 Zipファイルへの絶対パスで動作するかどうかもわかりません。親戚とのベストスティック。

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"
}

質問ありがとうございます。私もおそらくこれを使うことになるでしょう!

もう1つの編集:テストされていませんが、vimemacsはどちらもjarファイルを直接編集するのでしょうか。

19
beroe

VimはZipファイル内のファイルの透過的な編集をサポートしています。ただ実行する:

vim file.Zip

zipアーカイブ内のファイルのリストが表示されます。編集したいものを選択し、必要なものを変更して終了します。x

vimが次のように応答した場合:

変更できません。「変更可能」はオフです

.. :set modifiableまたは:set maを実行するだけです(source: https://stackoverflow.com/questions/5745506/vim-modifiable-is-off

54
jesjimher

短い答え:いいえ。

それがラッパーなら、あなたはこれらのコマンドを呼び出しています。とにかく、私が考えることができる最もよいことはあなたがX環境にいるならfile-rollerを使ってファイルを開くことであり、それはあなたの設定次第で、単純なダブルクリックで動作するかもしれません。圧縮ファイルをダブルクリックして開き、編集することができます。

$ file-roller b3.Zip 

編集したファイルを保存すると、このダイアログが表示されます。

このためのスクリプトを作成することもできますが、複数のファイルを含む圧縮アーカイブがある場合、それは複雑になります。それがあなたが必要とするものであれば私に知らせてください、そして私は何かを調理することができるかもしれません。

enter image description here

4
terdon

簡潔な答えいいえ。圧縮を考えているなら、内部のファイルを短くするために冗長性を使っているので、どんな編集でもアーカイブ内のファイル全体、おそらくアーカイブを変更します。

理論的ではなく、より実用的で、「手動で解凍する必要がないようにしたい」場合は、使用できるツールがあります。 Linux上のark は私が使ったものです。アーカイブを Fuse-Zip でマウントすることもできますが、おそらく一時ファイルよりも作業が多くなります。

0
Rich Homolka

私は入れ子になったZipファイルを閲覧し編集するために、Zip.vimを拡張するVimプラグインを書きました。

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

0
lbrayner

Zipのmanページによると(簡単に参照できるオンライン版: http://linux.die.net/man/1/Zip )、 Zipコマンドには、-uフラグがあります。

Zipアーカイブ内の既存のエントリが、Zipアーカイブ内に既に存在するバージョンよりも最近変更されている場合にのみ置き換えます(更新します)。

0
Proctor

Directory Opus 12ファイルマネージャを使用すると、Zipをブラウズしてから編集したファイルを別のフォルダからそのフォルダにドラッグアンドドロップし、編集したいファイルを上書きすることができます。非常に簡単

0
Technometry

たとえば、標準のKDEテキストエディタを使用できます。

  1. アーカイブマネージャでアーカイブを開く
  2. kDE guiエディタでテキストファイルを開く
  3. テキストファイルを保存し、システムはアーカイブの更新を要求します - はいをクリックします
  4. アーカイブの許可とアーカイブのフォルダを忘れないでください(私のお気に入りの間違い)
0
tvorez