递归压缩并排除一些目录

递归压缩并排除一些目录

我想压缩目录但排除一些子目录。假设我有这样的结构:

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 1project 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/**"

所以我排除了这个目录和那些目录中的所有内容,并将所有内容括在引号中,以便以有效的方式展开

相关内容