如何压缩文件但不包含顶层文件夹,同时保留子文件夹。

26

假设我有一个名为abc的文件夹,它递归地包含多个子文件夹,我想将abc文件夹下的所有内容压缩成zip文件,当我使用以下命令时:

zip -r abc.zip abc/*

我得到了abc.zip文件,但它包含了一个名为abc的顶层文件夹,而所有文件都在这个abc文件夹下面,例如abc/xxx,abc/yyy等等。如何移除这个名为abc的顶层文件夹?我想把所有文件直接放在abc.zip中。

注意:

  1. 我只能从文件夹外部进行压缩操作,所以进入abc文件夹并执行"zip * "命令对我来说行不通
  2. 我需要在单行运行此命令,可以通过;分隔多个命令
  3. 选项"-j"也不行,因为它会移除子文件夹,但我想要保留它们。
4个回答

34
cd abc
zip -r ../abc.zip *

虽然我会说在大多数情况下保持它为abc会更易于管理。


6

7z a -tzip abc.zip -w abc/.

321


1
为了进一步解释reiso答案,您可以使用7-Zip实用程序,该实用程序具有将工作目录传递给zip过程的选项。这就像在运行zip命令之前切换到该目录。
7z a -tzip abc.zip -w abc/.

a 是用于添加文件的。 -w abc /。 将工作目录设置为文件夹 abc,这将从您的 zip 中所有文件夹和文件的路径中排除 /abc/ 路径。

我能够通过运行 brew install p7zip 安装 7-Zip 实用程序。


0

这是一篇旧帖子,但我遇到了同样的问题。对我来说,在bash中以下内容运行良好:

$ ABC_HOME="..../abc"
$ cp abc.zip "$ABC_HOME"

$ cd "$ABC_HOME"
$ unzip abc.zip -d ../
[-d exdir] 可选参数,指定要提取文件的目录。默认情况下,所有文件和子目录都会在当前目录中重新创建;-d 选项允许在任意目录中提取(假设用户有写入该目录的权限)。此选项不必出现在命令行的末尾;它也可以在 zipfile 规范之前(带有正常选项),在 zipfile 规范之后或在文件和 -x 选项之间立即出现。选项和目录可以连接在一起,它们之间没有任何空格,但请注意,这可能会抑制正常的 shell 行为。特别地,“-d ~”(波浪号)会被 Unix C shells 扩展为用户主目录的名称,但“-d~”则被视为当前目录下的字面子目录“~”。

来源:https://linux.die.net/man/1/unzip


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接