Zip recursivo com a exclusão de alguns diretórios

1

Eu gostaria de zipar 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) 

Eu gostaria de zipar todo o diretório principal, mas gostaria de excluir caminhos como este:

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

onde:

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

O problema é que os project 1 e project 2 são bastante dinâmicos - há vários deles. Observe também que os diretórios vendor (e também em teoria node_modules ) podem ser colocados em outros locais, por exemplo, em project 1/html/public/vendor , portanto, não gostaria de excluir apenas o subdiretório vendor , mas apenas o subdiretório vendor específico que está localizado exatamente em diretórios de projetos html.

É possível fazer uma coisa tão complexa usando apenas o comando zip ou talvez algum script bash deva ser escrito para isso?

Estou usando o 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 de módulos de fornecedores e de nós vazios (mas não inclui seu conteúdo)

    
por Marcin Nabiałek 04.04.2018 / 20:03

1 resposta

0

Parece que a solução é:

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

para que eu exclua tudo neste diretório e esses diretórios também e envolva tudo em aspas para ser expandido de maneira válida

    
por 04.04.2018 / 21:05