Zip recursivo com exclusão de alguns diretórios

Zip recursivo com exclusão de alguns diretórios

Gostaria de compactar o diretório, mas excluir alguns subdiretórios. Digamos que eu tenha essa estrutura:

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) 

Gostaria de compactar todo o diretório principal, mas gostaria de excluir caminhos como este:

subdirectory2/*/html/vendor/**
subdirectory2/*/html/node_modules/**

onde:

  • *- é um diretório de um nível
  • **- é o diretório com quaisquer arquivos e subdiretórios

O problema é que esses project 1são project 2bastante dinâmicos - existem vários deles. Observe também que vendoros diretórios (e também em teoria node_modules) podem ser colocados em alguns outros lugares, por exemplo, então project 1/html/public/vendoreu não gostaria de excluir apenas vendoro subdiretório, mas apenas o subdiretório específico vendorque está localizado exatamente em determinados diretórios de projetos HTML.

É possível fazer algo tão complexo usando apenas zipo comando ou talvez algum script bash deva ser escrito para isso?

Estou usando MacOS se isso faz alguma diferença.

O que consegui até agora é:

cd directory && zip test-zip.zip  * -r -T -x */*/html/vendor/** */*/html/node_modules/**

Parece que quase funciona, mas cria diretórios vazios de fornecedores e módulos de nós (mas não inclui seu conteúdo)

Responder1

Parece que a solução é:

cd directory && 
zip test-zip.zip  * -r -T -x "*/*/html/vendor/" "*/*/html/node_modules/" "*/*/html/vendor/**" "*/*/html/node_modules/**"

então excluo tudo nestes diretórios e nesses diretórios também e também coloco tudo entre aspas para ser expandido de forma válida

informação relacionada