如何压缩文件夹,但不包括.git子文件夹


194

我正在尝试从文件夹创建一个zip文件,并且想.git从生成的zip文件中排除该子文件夹。

我已经转到我要压缩的文件夹(称为bitvolution)的父文件夹,并且正在执行以下操作:

zip -r bitvolution.zip bitvolution -x ".git"

但这并不排除.git子文件夹。

我已经试过各种组合-x .git*-x \.git/*-x .git/\*-x \.git/\*。我也尝试将完整路径用于exclude参数...但只是没有到达目的地。

Answers:


232

正确的表达式是-x *.git*,因此完整的命令应该是:

zip -r bitvolution.zip bitvolution -x *.git*

来自http://selfsolved.com/problems/zip-command-exclude-svn-director的说明:

正确的咒语是

zip -9 -r --exclude=*.svn*  foo.zip [directory-to-compress]

您也可以添加一个
--exclude=*.DS_Store*以排除烦人的Mac OS X目录显示元数据文件。

注意,传递给的表达式--exclude使用整个原始相对目录路径作为要匹配的原始字符串。因此.svn/*,它本身是行不通的。前面的通配符确保其与.svn目录树中任何位置的目录匹配。


20
我必须用引号将全引号引起来,或者用反斜杠将星号转义,例如zip --exclude '*.git*' -r directory.zip directoryzip --exclude \*.git\* -r directory.zip directory
Dmitry Minkovsky

6
如果您担心丢失其他文件something.gitwhatever,也可以使用--exclude /.git*
艾琳致电

4
在ZSH中,我必须加一个反斜杠:-x \*.git\*
DmitrySandalov 2014年

2
我的首选替代反斜线和引号的zsh:noglob zip -r out.zip someFolder -x *someExcludedFolder*
塞巴斯蒂安

如何与焦油一起使用?它不适用于tar命令。
RN库什瓦哈16'9

123

如果您要压缩存储在Git中的项目,请使用git archive命令。从源目录中:

git archive -o bitvolution.zip HEAD

您可以使用任何提交或标记ID,而不是HEAD在某个时候归档项目。

如果要为每个文件添加前缀(例如,顶级文件夹):

git archive -o bitvolution.zip --prefix=bitvolution/ HEAD

例如,您还可以在0(无压缩)和9(最大压缩)之间调整压缩级别。

git archive -o bitvolution.zip -9 HEAD

有关其他选项,请参见帮助页面(git help archive)。


25
这不仅不包括git文件夹,而且gitignore文件中的任何内容也将被排除。先生,您得到赞成票。
JoeMoe1984

1
正是我想要做的!
巴杰特(Bjarte)

我参加聚会很晚,但这绝对让我震惊。好答案!
汤姆(Tom)

我想知道为什么这不是最好的答案
nabtron

对我来说,这是当今最大的TIL ...
Shawn Cicoria

27

我加了反斜杠:

zip -r bitvolution.zip bitvolution -x \*.git\*

有关反斜杠的手册页:

反斜杠避免了shell文件名的替换,因此名称匹配由zip在所有目录级别执行。


在Ubuntu 14.04上为我加上带斜线叉的星号以排除目录
Dimitry K


2

如果使用的是zsh,则命令应如下所示:

zip -r target_name.zip source_dir -x '/*.git/*'

如果您使用:zip -r target_name.zip source_dir -x /*.git/*。如果没有'regex',zsh将在运行zip之前进行处理。您将收到错误消息:

zsh: no matches found: /*.git/*

谢谢!这就是我在Windows上的Ubuntu上使用Bash的工作方式。
阿德里亚诺·蒙尼奇

我不了解这种模式是如何工作的,但是在zsh为我工作。
签署
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.