当前位置: 首页>>技术教程>>正文


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

,

问题描述

我试图从一个文件夹创建一个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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/360.html,未经允许,请勿转载。