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

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

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

我已经进入了我想要压缩的文件夹的父文件夹(称为比特革命)我正在做:

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

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

我尝试了各种组合,,,,。-x .git*我也尝试过使用完整路径作为排除参数……但就是没有成功。-x \.git/*-x .git/\*-x \.git/\*

答案1

正确的表达是-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目录树中任何位置的目录。

答案2

如果您尝试压缩存储在 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)。

答案3

我添加了反斜杠:

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

有关反斜杠的手册页:

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

答案4

如果您想忽略整个文件夹,请使用以下格式。

例如,忽略node_modules每个端点中的每个文件夹:

zip -r API.zip API/* -x */node_modules/*

相关内容