Shell 从zip文件中提取文件并在编辑后将其放回zip文件的最佳方法

Shell 从zip文件中提取文件并在编辑后将其放回zip文件的最佳方法,shell,Shell,我想知道是否有人可以帮助我使用SHELL脚本来完成以下工作: 从zip文件中提取一个文件,并在编辑后将其放回,例如使用sed进行替换 我希望避免将zip文件的所有内容提取到临时文件夹中。zip文件可能包含与我要用编辑替换的文件同名的文件。在这种情况下,我希望在zip文件中指定此类文件的完整路径 有什么好办法来完成这项任务吗 非常感谢 从zip文件中提取文件: 解压file.zip file/you/want/to/extract/the_file.txt 修改_file.txt 把它放回去: z

我想知道是否有人可以帮助我使用SHELL脚本来完成以下工作:

从zip文件中提取一个文件,并在编辑后将其放回,例如使用
sed
进行替换

我希望避免将zip文件的所有内容提取到临时文件夹中。zip文件可能包含与我要用编辑替换的文件同名的文件。在这种情况下,我希望在zip文件中指定此类文件的完整路径

有什么好办法来完成这项任务吗

非常感谢

  • 从zip文件中提取文件:

    解压file.zip file/you/want/to/extract/the_file.txt

  • 修改_file.txt

  • 把它放回去:

    zip file.zip file/you/want/to/extract/the_file.txt


  • 这应该可以让你开始了。

    我手头没有任何zip文件可供测试。但继续使用holygeek的解决方案,我认为您甚至不必将其保存到磁盘,而是通过一些管道运行它

    unzip -p file.zip /path/2/your/file.txt \
    | sed 's/x/y/g' \
    | zip file.zip /path/2/your/file.txt - 
    
    注意最后一个“-”很关键,它告诉zip从stdin读取数据

    这来自zip-h2(完整帮助),在示例streams下


    我希望这有帮助。

    您可以使用fuse-zip将zip文件装载到某个位置并编辑该文件。 看


    您可以使用以下命令

    解压-jo MyZipFilw.zip*.xml-d xml

    有关详细信息,请参阅博客:


    +1谢谢!第一次解压实际上并不会从zip文件中删除该文件。第二个zip实际上覆盖了原始内容。对的在第一步中是否有方法从zip文件中删除(仅)目标文件?是,它不会从zip文件中删除该文件。要从zip文件中删除该文件,您必须执行一个单独的步骤:zip-d file.zip file/To/delete.txt,我在zip手册页的-d或--delete选项中查找了它。你看不到它,但是有一个被删除的帖子,有人已经建议FUSE,OP说这不是一个选项。在脚本中挂载文件并进行更改和卸载是非常简单的。做其他答案所做的事情也是非常简单的。事实上,更简单。总之,简单不是重点;正如我所说,OP说保险丝根本不是一个选项。他说,“我没有安装保险丝的奢侈”,也许这会帮助其他有类似问题的人
    fuse-zip my.zip /tmp_location
    edit some file (sed ...)
    fusermount -u /tmp_location