压缩文件而不包含父目录


12

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

  • artifact1.app
  • artifact2.ext2
  • artifact3.ext3
  • ...

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

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

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

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


1
从手册页看,这似乎仅-j适用,并且会将所有文件夹压缩到ZIP内的单个根目录中。那不是您想要的,不是吗?
phyrfox

@phyrfox也许是。需要验证。谢谢。
Lorenzo B

Answers:


13

如果要将所有文件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补全,因为在运行zip命令时Shell不会意识到您将位于另一个目录中。要解决此问题,请cd单独发出命令。要轻松返回上一个目录,可以使用pushdpopd

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

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


您不必明确列出子目录(folder)中的所有文件,只需使用通配符即可,例如zip -j folder/*
Jakub Kukul

依靠shell扩展意味着点文件(例如.profile)不会包含在归档文件中。相反,更改当前工作目录并指定.为要存档的文件:cd folder && zip -r ../folder.zip .
sheldonh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.