压缩文件而不包含父目录

压缩文件而不包含父目录

我有一个包含多个文件的文件夹

文件夹

  • 工件1.app
  • 工件2.ext2
  • 工件3.ext3
  • ...

我的目标是从该文件夹外部压缩文件(因此不使用cd命令),而不包含文件夹 dir。

zip -r ./folder/artifact.zip ./folder/artifact1.app

此命令包含最终 zip 中的文件夹目录。有什么提示吗?

相关问题:压缩文件夹的内容而不包括文件夹本身

答案1

如果您想将所有文件存储在folder其名称下而不指定目录,则可以使用该-j选项。

zip -j folder/artifact.zip folder/artifact1.app folder/artifact2.ext2 folder/artifact3.ext3

或者

zip -j folder/{artifact.zip,artifact1.app,artifact2.ext2,artifact3.ext3}

如果子目录中有文件,它们在存档中也不会有任何目录组件,例如folder/subdir/foo将作为foo.

但更改目录可能会更容易。它的输入量几乎与上面的大括号方法完全相同。如果这样做,如果您在子目录中包含文件,它们将具有您更改为的目录的相对路径,例如folder/subdir/foo将存储为subdir/foo.

(cd folder && zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3)

对于交互式使用,您会以这种方式丢失 shell 完成功能,因为 shell 不会意识到您运行命令时将位于不同的目录中zip。要解决此问题,请cd单独发出命令。要轻松返回到上一个目录,您可以使用pushdpopd

pushd folder
zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3
popd

如果您想要完全控制 zip 文件中存储的路径,您可以创建符号链接林。除非另有说明,否则zip不存储符号链接。

相关内容