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

Linux 使用shell将目录中的文件压缩为zip文件,linux,shell,zip,Linux,Shell,Zip,我想将文件系统中的文件压缩到新zip归档文件中的一个目录,或者更新一个旧的zip归档文件。下面是我的例子: directory/ |-file1.ext |-file2.ext |-file3.ext 在zip存档中,它应该如下所示: new_directory/ |-file1.ext |-file2.ext |-file3.ext 我可以将文件复制到一个新的目录并从那里压缩它们,但我不想有额外的步骤。我还没有在谷歌上找到这个问题的答案。手册页也没有提到类似的内容,

我想将文件系统中的文件压缩到新zip归档文件中的一个目录,或者更新一个旧的zip归档文件。下面是我的例子:

directory/
  |-file1.ext
  |-file2.ext
  |-file3.ext
在zip存档中,它应该如下所示:

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

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

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

ln -s directory new_directory
zip -r foo.zip new_directory
rm new_directory
如果您可以选择其他归档格式,那么使用tar归档会更容易一些,因为GNU tar有一个
--transform
选项,在将文件添加到归档文件之前,它使用sed命令应用于文件名

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


谢谢,tar对我来说不是一个选择,但是符号链接是一个很好的解决方案,我一开始没有考虑到这一点。
tar czf foo.tar.gz --transform 's:^directory/:new_directory/:' directory