我正在尝试从一个文件夹创建一个 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/*