将文件添加到 zip 文件的深处

Tyi*_*ilo 7 zip

说我要添加的文件file.txtfoo.zip,我只是做zip -u foo.zip file.txt

但是在 zip 文件中已经存在一个带有路径的文件夹foo.zip/very/many/paths/(相对于 zip 文件)。

我将如何添加file.txt到 zip 文件中,以便它在 zip 文件中的位置是foo.zip/very/many/paths/file.txt

我可以先创建所需的目录结构,但没有更简单的方法吗?

我通常会这样做:

$ls
文件.txt
压缩包
$ mkdir 非常
$ mkdir 非常/很多
$ mkdir 非常/许多/路径
$ cp file.txt 非常/许多/路径
$ zip -u foo.zip very/many/paths/file.txt
$ rm -rf 非常

Tri*_*onX 1

我建议的一种方法是解压缩、移动文件,然后重新压缩。

举个例子,假设我们有这个 zip 文件:

Archive:  foo.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2013-01-30 14:38   very/
        0  2013-01-30 14:38   very/many/
        0  2013-01-30 14:38   very/many/paths/
        0  2013-01-30 14:38   very/many/paths/foo.txt
        0  2013-01-30 14:38   file.txt
---------                     -------
        0                     5 files
Run Code Online (Sandbox Code Playgroud)

要解压文件,我们首先创建一个目录/tmp。然后我们将执行以下操作:

  1. 解压foo.zip到我们的临时目录
    d=$(mktemp -t -d foo.zip.XXXXXX) && unzip -d $d foo.zip
  2. 将文件移动到新路径(相对于 temp dir $d
    mv ${d}/file.txt ${d}/very/many/paths/
  3. 在子 shell 中:cd到临时目录并将所有内容重新压缩到新的 zip 文件中
    ( cd $d && zip -r foo.zip ./* )
  4. 从临时目录中移动新的 zip 文件以替换旧的
    mv ${d}/foo.zip ./
  5. 清理 :-)
    rm -rf ${d}