使用 shell 压缩 zip 文件中目录中的文件

Compress files in a directory in a zip file with the shell

我想将文件系统中的文件压缩到新的 zip 存档中的目录或更新旧的。所以这是我的例子:

directory/
  |-file1.ext
  |-file2.ext
  |-file3.ext

在 zip 存档中它应该如下所示:

new_directory/
  |-file1.ext
  |-file2.ext
  |-file3.ext

我可以将文件复制到一个新目录并从那里压缩它们,但我不想有那个额外的步骤。我还没有在 google 上找到该问题的答案。手册页也没有提到类似的内容,所以我希望有人能帮助我。

我认为 zip 实用程序不支持这种转换。解决方法是使用符号 link:

ln -s directory new_directory
zip -r foo.zip new_directory
rm new_directory

如果您可以选择其他存档格式, 那么使用 tar 存档会更容易一些,因为 GNU tar --transform 选项采用 sed 命令,它在将文件添加到存档之前应用于文件名。

在那种情况下,您可以使用(例如)

tar czf foo.tar.gz --transform 's:^directory/:new_directory/:' directory