私は、UNIXベースのシステム(maxOS、Linux)で、ユーザーが他のサードパーティソフトウェアをインストールする必要なく、未知の数のパッケージを圧縮できるソリューションを見つけようとしています。
次のフォルダ構造があります。
MyProject
/packages
/custom-modules
/Module1
/ios
/src
/Module2
/ios
/src
...
カスタムモジュールの数と名前は異なる場合があります。これで、すべてのモジュールフォルダを圧縮してそれに応じて名前を付けることができるソリューションが必要ですsrc
。つまり、最終出力は次のようになります。
MyProject
/packages
/custom-modules
/Module1
/ios
/src
/Module1.zip
/Module2
/ios
/src
/Module2.zip
...
理想的には、これらのコマンド/スクリプトを実行するたびに、既存の既存のzipファイルが削除され、新しいファイルが作成されます。
ベストアンサー1
MyProject/packages/custom-modules
ディレクトリから始めて、次の行で作業を行います。
for module in * ; do cd "$module/ios/" && zip -qr "$module.zip" src/ && cd - &> /dev/null ; done
ここでのアイデアは、ワイルドカード/globを使用してすべてのモジュールディレクトリ名を取得することです。次に、各ディレクトリに対して「ios」サブディレクトリに変更し、zipコマンドを実行します。コマンドを直接実行することもできますが、これzip
は望ましくないアーカイブの拡張パスを含みます。最後に、親ディレクトリに戻り、次の繰り返しを続行します。
これはデモです。元のディレクトリ構造は次のとおりです。
[haxiel@testvm1 custom-modules]$ tree
.
├── Module1
│ └── ios
│ └── src
│ ├── file1
│ └── file2
└── Module2
└── ios
└── src
├── file1
└── file2
6 directories, 4 files
次に、次のコマンドを実行します。
[haxiel@testvm1 custom-modules]$ for module in * ; do cd "$module/ios/" && zip -qr "$module.zip" src/ && cd - &> /dev/null ; done
最終的なディレクトリ構造は次のとおりです。
[haxiel@testvm1 custom-modules]$ tree
.
├── Module1
│ └── ios
│ ├── Module1.zip
│ └── src
│ ├── file1
│ └── file2
└── Module2
└── ios
├── Module2.zip
└── src
├── file1
└── file2
6 directories, 6 files
以下は、内容を示すサンプルZIPファイルです。
[haxiel@testvm1 custom-modules]$ unzip -l Module1/ios/Module1.zip
Archive: Module1/ios/Module1.zip
Length Date Time Name
--------- ---------- ----- ----
0 03-16-2019 20:42 src/
0 03-16-2019 20:42 src/file1
0 03-16-2019 20:42 src/file2
--------- -------
0 3 files