如何压缩文件夹但排除.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/*