压缩档案但不包含父目录

压缩档案但不包含父目录

我想像这样压缩目录树中的许多文件夹

V-
 something.txt
 folder
 folder
 g.jpg
 h.jar

当我尝试压缩它时,它最终创建一个包含 v 文件夹而不是其内容(子目录和文件)的 zip 存档

我该如何避免这种情况?

答案1

希望这可以帮助。

(cd directory && zip -r ../out.zip .)

它保持主 shell 在同一目录中,并且仅更改执行命令后终止的子 shell 的目录。

答案2

在 zip 命令中使用-j或选项。--junk-paths

来自zip 手册页

-j

--junk-paths

Store just the name of a saved file (junk the path), and do not store directory 
names. By default, zip will store the full path (relative to the current 
directory).

答案3

因此,如果我理解正确的话,您正在尝试将文件和文件夹存档在特定文件夹中,但不包括根文件夹。

例子:

/test/test.txt
/test/test2.txt

其中 test.txt 和 test2.txt 将存储在 zip 中,但不存储在 /test/ 中

你可以进入 /test/ 目录然后运行如下命令,

zip -r filename.zip ./*

这将在名为 filename.zip 的同一文件夹中创建一个名为的存档。或者,如果从文件夹外部运行它,您可以运行,

zip -r test.zip test/*

/* 是仅包含文件夹内容的部分,而不是整个文件夹。

编辑:OP 想要多个 zip,但解决方案最终有点像黑客攻击,我很好奇是否有更好的方法来做到这一点。

for d in */ ; do base=$(basename "$d") ; cd $base ; zip -r $base * ; mv "${base}.zip" .. ; cd .. ; done;

答案4

cd `dirname path/to/archive` && zip -rq $OLDPWD/arhive.zip . && cd -

这不仅适用于 flatten tree(如-j),而且你可以指定任何目录(不仅仅是子目录)

相关内容