有没有办法在 zip 文件中编辑文件而无需先明确提取它们?

aus*_*tin 55 linux unix zip shell jar

我有时需要对 .zip 或 .jar 文件进行更改,因此我通常将文件移动到/tmp,使用 提取所有文件unzip,编辑一些文件,然后重新压缩文件。这有效,但可能很乏味。是否有实用程序或 shell 脚本可用于编辑 zip 文件中的文件而无需显式调用unzipand zip(即使它只是这些命令的包装器)?

jes*_*her 69

Vim 支持透明地编辑 zip 文件中的文件。只需执行:

vim file.zip

您将看到 zip 存档中的文件列表。选择你想编辑的,改变你想要的,然后退出:x

如果vim回复:

无法进行更改,“可修改”已关闭

.. 运行:set modifiable:set ma(来源:https : //stackoverflow.com/questions/5745506/vim-modifiable-is-off

  • 这应该被标记为正确答案 (6认同)
  • 救命稻草。vim 非常酷的功能,也很出乎意料 (3认同)
  • 顺便说一下,vim 中的默认 zip 支持只允许编辑一级 ZIP。如果你需要在 ZIP 中编辑 ZIP,你应该使用 [this vim plugin](http://www.vim.org/scripts/script.php?script_id=2206)。 (2认同)
  • 与 emacs 相同。 (2认同)

ber*_*roe 23

解压前知道存档中文件的名称吗?您可以创建一个函数来解压缩/tmp、编辑和刷新 zip:

zipedit(){
    echo "Usage: zipedit archive.zip file.txt"
    unzip "$1" "$2" -d /tmp 
    vi /tmp/$2 && zip -j --update "$1"  "/tmp/$2" 
}
Run Code Online (Sandbox Code Playgroud)

正如它所说,用法是:

zipedit myarchive.zip myfile.txt
Run Code Online (Sandbox Code Playgroud)

这将从存档中解压缩命名文件,将其保存到/tmp,在其中进行编辑,vi然后将其添加回存档,同时“垃圾化”路径。添加到您的 .bash_profile,假设bash...

编辑:以下是与存档内的子文件夹一起使用的版本...注意,不要在文件夹名称前使用斜杠(即使用myfolder/file.txtnot /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"
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的提问。我可能最终也会使用这个!

另一个编辑:未经测试,但我阅读了该内容vim并将emacs直接编辑 jar 文件?


ter*_*don 6

简短的回答:不。

如果它是包装器,则您正在调用这些命令。无论如何,我能想到的最好的方法是使用打开文件file-roller,如果您处于 X 环境中,则可能只需双击即可使用,具体取决于您的设置。然后您可以双击压缩文件将其打开,然后您可以对其进行编辑:

$ file-roller b3.zip 
Run Code Online (Sandbox Code Playgroud)

当您保存编辑的文件时,您应该会看到以下对话框:

您也可以为此编写一个脚本,但如果您有包含多个文件的压缩档案,那就会变得复杂。如果您需要的话请告诉我,我也许可以做一些东西。

在此输入图像描述