问题描述
我试图从一个文件夹创建一个zip文件,我想从生成的zip文件中排除.git
sub-folder。
我去了我想压缩的那个父文件夹(叫做bitvolution),我正在做:
zip -r bitvolution.zip bitvolution -x ".git"
但它不排除.git
sub-folder。
我尝试了各种组合,-x .git*
,-x \.git/*
,-x .git/\*
,-x \.git/\*
。我也尝试使用排除参数的完整路径…但只是没有达到那里。
最佳解决思路
正确的表达式是-x *.git*
,所以完整的命令应该是:
zip -r bitvolution.zip bitvolution -x *.git*
http://selfsolved.com/problems/zip-command-exclude-svn-director的解释:
The correct incantation is
zip -9 -r --exclude=*.svn* foo.zip [directory-to-compress]
You can also add a
--exclude=*.DS_Store*
to exclude the annoying Mac OS X directory display metadata files.Notice that the expression passed to
--exclude
is using the entire original relative directory path as the original string to match against. So.svn/*
by itself doesn’t work; the wildcard character in front ensures that it matches.svn
directories anywhere in the directory tree.
次佳解决思路
如果您尝试压缩存储在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
)。
第三种解决思路
我加了反斜杠:
zip -r bitvolution.zip bitvolution -x \*.git\*
关于反斜杠的手册页:
The backslash avoids the shell filename substitution, so that the name matching is performed by zip at all directory levels.
第四种思路
假设你在机器上安装了git,你也可以使用git来创建你的压缩文件。
git archive --format=zip HEAD -o bitvolution.zip