いくつかのディレクトリを除外して再帰的に圧縮する

いくつかのディレクトリを除外して再帰的に圧縮する

ディレクトリを圧縮したいのですが、いくつかのサブディレクトリは除外したいと思います。次のような構造があるとします。

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) 

メインディレクトリ全体を ZIP 圧縮したいのですが、次のようなパスを除外したいと思います。

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

どこ:

  • *- 1レベルのディレクトリです
  • **- ファイルとサブディレクトリを含むディレクトリ

問題は、これらproject 1とがproject 2非常に動的であり、複数存在することです。また、vendorディレクトリ (および理論上はnode_modules) は、たとえば などの他の場所に配置できることにも注意してください。そのため、サブディレクトリだけでなく、プロジェクトの特定の html ディレクトリに正確に配置された特定のサブディレクトリのみproject 1/html/public/vendorを除外したいと思います。vendorvendor

コマンドだけを使用してこのような複雑なものを作成することは可能ですか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/**"

したがって、このディレクトリとそれらのディレクトリ内のすべてを除外し、すべてを引用符で囲んで有効な方法で展開します

関連情報