我想压缩目录但排除一些子目录。假设我有这样的结构:
directory
subdirectory 1
subdirectory 2
project 1
html
directory 1
vendor
node_modules
... (other directories)
project 2
html
directory 2
vendor
node_modules
... (other directories)
我想压缩整个主目录,但我想排除这样的路径:
subdirectory2/*/html/vendor/**
subdirectory2/*/html/node_modules/**
在哪里:
*
- 是单级目录**
- 是包含任何文件和子目录的目录
问题是那些project 1
和project 2
非常动态 - 它们有多个。还请注意,vendor
目录(以及理论上node_modules
)可以放在其他一些地方,例如,project 1/html/public/vendor
所以我不会只排除vendor
子目录,而只排除vendor
位于项目给定 html 目录中的特定子目录。
是否可以仅使用zip
命令来完成如此复杂的事情或者也许应该为此编写一些 bash 脚本?
如果有任何区别的话,我正在使用 MacOS。
我目前所取得的成就是:
cd directory && zip test-zip.zip * -r -T -x */*/html/vendor/** */*/html/node_modules/**
它似乎几乎可以工作,但它会创建空的供应商和节点模块目录(但不包括其内容)
答案1
解决方案似乎是:
cd directory &&
zip test-zip.zip * -r -T -x "*/*/html/vendor/" "*/*/html/node_modules/" "*/*/html/vendor/**" "*/*/html/node_modules/**"
所以我排除了这个目录和那些目录中的所有内容,并将所有内容括在引号中,以便以有效的方式展开