有没有一种方法可以编辑zip文件中的文件,而无需先明确提取它们?


47

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


只是好奇答案是否适用于.jar文件?(我没有在那里进行测试。)
beroe 2013年

@beroe因为那些人​​使用zip压缩算法,所以应该使用。这实际上是我寻求解决方案的主要动机,因为我在应用服务器上部署了.war文件,因此我不想重新打包并重新部署以修改单个文件。
奥斯汀

大。我将尝试修复该功能,以使其保留存档中的目录结构。目前,我认为它仅适用于根级别的文件,但就我的目的而言,子文件夹更为有用。
2013年

@beroe太酷了。在问这个问题之前,我将编写一个python脚本,以在zip文件“内部”启动一个psudo外壳以执行任意命令。我会对您的想法感兴趣。
奥斯汀

好的,添加了另一个支持子文件夹的解决方案,并且可以在有限的测试中使用。
beroe

Answers:


19

在解压缩文件之前,您是否知道档案中的文件名?您可以使用以下功能解压缩/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然后将其添加回存档中,同时“填充”路径。假设bash... 添加到您的.bash_profile

编辑:以下是可与存档中的子文件夹一起使用的版本...注意,请勿在文件夹名称前使用斜杠(即,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"
}

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

另一个编辑:未经检验的,但我读了vimemacs将两者编辑jar文件直接?


我可以确认vim在Linux上从命令行编辑zip文件时能出色地工作,非常感谢!
Thomas Bindzus 2014年

59

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

vim file.zip

然后您会看到zip存档中的文件列表。选择您要编辑的内容,更改所需内容,然后使用:x退出

如果vim回应:

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

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


2
顺便说一句,vim中的默认zip支持仅允许编辑一级ZIP。如果需要在ZIP内编辑ZIP,则应使用此vim插件
jesjimher 2014年

1
与emacs相同。
迈克(Mike)

4
这应该被标记为正确的答案
Martijn Burger

3
救生员。vim的真正酷功能,也是非常出乎意料的
PeterPerháč16年

4

简短答案:不。

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

$ file-roller b3.zip 

保存编辑的文件时,应显示以下对话框:

您也可以为此编写脚本,但是如果压缩的存档包含多个文件,则脚本将变得很复杂。让我知道这是否是您所需要的,我也许可以煮些东西。

在此处输入图片说明


0

简短的书呆子答案;没有。如果考虑压缩,则使用冗余来缩短内部文件的长度,因此任何编辑都会更改归档文件(可能是归档文件)中的整个文件。

如果您理论性较差,实用性强,更多“我不想手动解压缩/压缩”,则可以使用一些工具。我已经使用过Linux上的方舟。您也可以使用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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.