我有一个包含多个文件的文件夹
文件夹
- 工件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
单独发出命令。要轻松返回到上一个目录,您可以使用pushd
和popd
。
pushd folder
zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3
popd
如果您想要完全控制 zip 文件中存储的路径,您可以创建符号链接林。除非另有说明,否则zip
不存储符号链接。