我有一个名为folder的目录,看起来像这样:

folder
      -> root_folder
                    -> some files


我想将此目录压缩到zipped_dir中,我试过了: br />
但这会生成一个看起来像这样的ZIP:如何在不移动任何内容的情况下从ZIP中排除此父目录?

IE,我希望得到此最终结果:

zip -r zipped_dir.zip folder/*


#1 楼

尝试使用此命令(您将会明白)

cd folder; zip -r ../zipped_dir.zip *


也许还有其他方法,但这对我来说是最快,最简单的方法:

评论


这完美地完成了这个技巧。注意:它将执行chroot。

– loretoparisi
16年8月25日在14:24

@TobiasKolb,也许您没有阅读问题。 OP不想将文件夹放入zip的存储路径中。

–罗密欧·尼诺夫(Romeo Ninov)
18/09/12在10:55

似乎唯一的方法

–罗伯特
18/09/13在2:32

这不会添加隐藏文件

–Gus
18年11月25日在0:53

@PabloDiaz,在我的示例中cd-将完成工作(仅一个命令):)或cd ..

–罗密欧·尼诺夫(Romeo Ninov)
19年2月15日在18:37



#2 楼

使用-j;例如:zip -r -j zipped_dir.zip folder/*

不会压缩“ root_folder”。

评论


如果我有两个同名文件,我会得到一个错误。

–克里斯
16年1月1日在22:06

OP可能只希望删除父目录,而不是全部删除。

–托克兰
17年3月13日在10:13

它也会展平子目录文件。

– Sumit Ramteke
18年5月10日在7:19

-j选项消除所有目录信息,仅保存文件。也就是说,以“固定”方式将所有文件存储在一个目录下。

–罗伯特
18/09/13在2:34

这不应该是公认的答案

– Dimitri Kopriwa
19-10-13在18:14

#3 楼

zip -r -D zipped.zip *


-D指示zip不创建目录。

评论


这是最干净的解决方案。

–海德
20年6月11日在4:22

在Mac OS zip中似乎不是有效的选项

– dtech
20年7月16日在8:30

在macOS中工作。不要忘记使用*会排除隐藏文件,因此我最终使用了。:zip -D -r ../archive.zip。

– Justinas Lelys
20 Sep 10 '13:55

#4 楼

这是对我有用的方法:例如,
zipped.zip:
     file1.txt
     otherdir/
        file2.txt

隐藏文件:
正确指出7z a zipped.zip ./rootDir/* 的注释,上面的内容不包含隐藏文件。
其余的答案也是如此(在至少保留目录结构的文件)。一种解决方案是显式添加隐藏路径通配符。
 zip 

OR
 rootDir 

结果:
zipped.zip:
     file1.txt
     .hiddenfile1.txt
     .hiddendir/
        file3.txt
     otherdir/
        file2.txt


评论


我需要的最佳答案。

–马辛
20年1月1日,下午2:27

那应该是公认的答案,而且肯定更高。无需更改目录,而是简单明了。

–geo909
20-3-31在10:49



这不处理./rootDir/.xxx。它应该类似于.rootDir /{.*,*}

– Shiva Wu
20年5月11日,1:50

@ShivaWu正确!我已经更新了答案。注意:有效的通配符(至少在bash上有效)与您提供的通配符略有不同。

– Marinos An
20-5-11在10:53