最初に明示的に抽出せずに、zipファイル内のファイルを編集する方法はありますか?


47

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


答えが.jarファイルで機能するかどうかを知りたいですか?(私はそこではテストしませんでした。)
2013

@beroeそれらはzip圧縮アルゴリズムを使用しているため、そうすべきです。それは実際にソリューションを探すための私の主な動機でした。なぜなら、単一のファイルを変更するためだけに再パックして再デプロイする気にならないアプリサーバーに.warファイルがデプロイされていたからです。
オースティン

すばらしいです。この機能を修正して、アーカイブ内のディレクトリ構造を維持しようとしています。現在、ルートレベルのファイルでのみ機能すると思いますが、私の目的では、サブフォルダーの方が便利です。
ベロエ

@beroeそれはかなりクールです。これを尋ねる前に、zipファイルの「内部」でpsudo-shellを起動して任意のコマンドを実行するためのpythonスクリプトをコーディングしていました。あなたが思いついたことに興味があります。
オースティン

OK、サブフォルダーをサポートする別のソリューションを追加しましたが、限られたテストで機能します。
ベロエ

回答:


19

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

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、パスに「ジャンク」されながらアーカイブに追加されます。想定して、.bash_profileに追加しますbash...

編集:以下は、アーカイブ内のサブフォルダーで動作するバージョンです...注、フォルダー名の前にスラッシュを使用しmyfolder/file.txtないでください(つまり、notを使用します/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"
}

質問ありがとう。私もおそらくこれを使用することになります!

別の編集:テストされていませんが、私はそれを読んでvimemacs両方のjarファイルを直接編集しますか?


Linuxのコマンドラインからzipファイルを編集するためにvimが素晴らしい動作をすることを確認できます。
トーマスビンズ14

60

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

vim file.zip

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

次のようにvim応答する場合:

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

..単に実行する:set modifiable:set ma(ソース:https : //stackoverflow.com/questions/5745506/vim-modifiable-is-off


2
ところで、vimのデフォルトのzipサポートでは、1レベルのZIPのみを編集できます。ZIP内のZIPを編集する必要がある場合は、このvimプラグインを使用する必要があります
jesjimher

1
emacsと同じです。
マイク

4
これは正しい答えとしてマークする必要があります
Martijn Burger

3
命の恩人。本当にあまりにもvimの、そしてかなり予想外の特徴を冷却する
ピーターPerháč

4

短い答え:いいえ。

ラッパーの場合、これらのコマンド呼び出しています。とにかく、私が考えることができる最良の方法file-rollerは、X環境を使用している場合、セットアップによっては単純なダブルクリックで機能する可能性がある場合、を使用してファイルを開くことです。次に、圧縮ファイルをダブルクリックして開き、編集することができます。

$ file-roller b3.zip 

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

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

ここに画像の説明を入力してください


0

簡潔な答え; いや 圧縮について考える場合、内部のファイルを短縮するために冗長性を使用しているため、編集によりアーカイブ内のファイル全体、おそらくアーカイブが変更されます。

理論的でなく、より実用的で、「手動でunzip / zip圧縮する必要はない」ということは、使用できるツールがあります。Linuxのarkは私が使ったものです。fuse-zipを使用してアーカイブをマウントすることもできますが、これはおそらく一時ファイルよりも多くの作業です。


誰かが-1を与えた理由がわからない +1 fuse-zip
myrdd

0

zip(簡単に参照できるオンラインバージョン:http : //linux.die.net/man/1/zip)のマニュアルページによると、zipコマンドには次のような-uフラグがあります。

既にzipアーカイブにあるバージョンよりも最近変更された場合にのみ、zipアーカイブの既存のエントリを置換(更新)します。


0

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



0

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

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

投稿の書式を修正してください。
-davidbaumann
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.