如何压缩文件夹但排除.git子文件夹

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

我已经去了我要压缩的那个称为bitvolution )的父文件夹,我正在做:

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

但它不排除.git子文件夹。

我尝试了各种组合, -x .git*-x \.git/*-x .git/\*-x \.git/\* 。 我也尝试使用exclude参数的完整路径…但是没有达到目的。

正确的表达式是-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目录。

如果您正在尝试压缩存储在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\* 

关于反斜杠的手册页:

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

假设你在机器上安装了git,你也可以使用git本身来创建你的档案。

 git archive --format=zip HEAD -o bitvolution.zip 

如果您使用zsh,命令应如下所示:

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

如果您使用: zip -r target_name.zip source_dir -x /*.git/* 。 没有’正则表达式’,zsh将在zip运行之前处理。 您将收到错误消息:

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