TL;DR
カレントディレクトリ以下のcomposer.jsonを探してcomposerを実行するワンライナー
find . -name composer.json -exec cd `dirname {}` \; -exec composer install \;
検証環境
ホストOS: Windows10
ゲストOS: CentOS Linux releaase 7.6 1810 (Core)
VituralBox: 5.2.28
Vagrant: 2.2.0
apache2(httpd): 2.4.6 (CentOS)
PHP: 5.6.38
Composer: 1.9.0
bash: 4.2.46(2)
解説
-
find . -name composer.jsonで、カレントディレクトリ(.)以下からファイル名composert.jsonを探します。 -
findコマンドのオプション-execによって、検索結果のパスが入った変数(?){}が1行ずつ展開され、dirnameコマンドで composer.json ファイルが入っているディレクトリへのパスが取得されます。 -
dirnameコマンドの結果で得られたディレクトリへcdします。 -
findコマンドの-execオプションは、\;をつけることで、次の-execオプションに継続させることができるので、cdした先のディレクトリでcomposer installを実行します。 -
findで発見したファイルのあるディレクトリすべてでcomposer installが実行されます。
※composer install は composer i と略記できるので、可読性が気にならない場合は略記することが可能です。
おわりに
fuelPHP を使っているプロジェクトに参加しているのですが、仮想環境にプログラムを展開したとき、ソースの各地に散らばる composer.json を蹴って回るのがめんどくさいので全力で手を抜くために頑張りました。
Laravel などでも同じことが利用できるかもしれません。お役に立てれば幸甚です。