创建zip文件并忽略目录结构


216

我需要使用以下命令创建一个zip文件:

zip /dir/to/file/newZip /data/to/zip/data.txt

这可行,但是创建的zip文件会创建一个目录结构,将目录模仿为原始文件。我不需要很多额外的文件夹。

粗略浏览手册页或Google搜索时,我没有找到答案。



2
我以为这个问题早于所有其他堆栈交换,但是可惜超级用户的帖子实际上早于此。如果有什么事情我可以在这里提供帮助,请告诉我。这肯定是一个非常热门的答案,因为google仍然在这里吸引大量流量。:D
杰克

Answers:


351

您可以使用-j

-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).

19
如果-j不适用于您的目录(以及-r),请签出此答案
czerasz

有时它只是行不通的...更喜欢@czerasz链接;)这基本上是一个
推式弹出

36

使用-j-r选项不起作用。
因此,解决方法可以是:

cd path/to/parent/dir/;
zip -r complete/path/to/name.zip ./* ;
cd -;

或在线版本

cd path/to/parent/dir/ && zip -r complete/path/to/name.zip ./* && cd -

/dev/null如果您不希望cd -输出出现在屏幕上,则可以将输出定向到


实际上,您可能需要执行以下操作:cd path/to/parent/dir/ && zip -r ../../../../name.zip ./* && cd -
eddyP23 '19

@ eddyP23它有什么不同?而是会导致您添加否。路径中每个目录的parentDir(..):
Vikas Tawniya

我同意结果是一样的。但是在运行于许多不同环境中的自动化脚本中,通常会避开全局路径,因为您不知道全局路径将是什么。但是,cd path/to/parent/dir/您可以../轻松计算出双点数。
eddyP23 '19

@ eddyP23很有道理
Vikas Tawniya '19

33

使用-j选项:

   -j     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 path).


3

或者,您可以创建指向文件的临时符号链接:

ln -s /data/to/zip/data.txt data.txt
zip /dir/to/file/newZip !$
rm !$

这也适用于目录。


1

保留父目录,这样unzip就不会到处散布文件

在压缩目录时,将父目录保留在存档中将有助于避免在以后解压缩存档文件时乱码当前目录

因此,为了避免保留所有路径,并且由于不能同时使用-j和-r(您会得到error),因此可以这样做:

cd path/to/parent/dir/;
zip -r ../my.zip ../$(basename $PWD)
cd -;

../$(basename $PWD)是保留父目录的魔力。

因此,现在unzip my.zip将提供一个包含所有文件的文件夹:

parent-directory
├── file1
├── file2
├── dir1
│   ├── file3
│   ├── file4

而不是用解压缩的文件乱丢当前目录:

file1
file2
dir1
├── file3
├── file4

0

只需使用该-jrm选项即可删除文件和目录结构

zip -jrm /path/to/file.zip /path/to/file

-m --move小心,将指定的文件移动到zip归档文件中;实际上,这将在创建指定的zip存档后删除目标目录/文件。如果目录在删除文件后变为空,则目录也会被删除。直到zip成功创建存档后,才可以进行删除操作。这对于节省磁盘空间很有用,但是有潜在的危险,因此建议在删除所有输入文件之前将其与-T结合使用以测试归档文件。
catalint
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.