次の質問に関するフォローアップの質問です。Bash:各ディレクトリにmy_suites.cfgファイルを使用してコマンドを実行しますか?
元の質問に対する回答のグローバル再帰繰り返しが強すぎます。処理中のフォルダの名前を確認して制限したいと思います。
- サブストリングBlを含むフォルダーを含むルートフォルダーでこのスクリプトを実行します。
- 各 Bl フォルダー内には、サブストリング test を含むサブフォルダーがあります。
- *testフォルダには、通常my_suites.cfgを含むbinフォルダがあります。ここでmakeコマンドのバリエーションを実行したいと思います。
* Blフォルダには、my_suites.cfgに似た構造を含むサブストリングLwUを含む追加のサブフォルダがあります。以前の回答はグローバル反復を使用しているため、すべての項目を繰り返し、時間がかかりすぎます。
部分文字列LwUを含むフォルダをスキップするために、繰り返し中にフォルダ名の部分文字列を確認できますか?
編集:私が言及した前の質問に対する答え:
shopt -s globstar
for d in **/; do if [[ -f "$d/my_suites.cfg" ]]; then cd "$d"; make; cd -; fi; done
Bl フォルダのディレクトリ構造の例です。 Blフォルダのtest / binフォルダにあるコマンドを実行したいです。 test / binフォルダ名は必ずしも「test」である必要はありませんが、my_suites.cfgを含みます。たとえば、フォルダ名は extra_test として指定できます。サブフォルダ innerModuleSwU も同様の構造を持っています。これらのフォルダにはサブストリング SwU が含まれます。私はこれらを扱うことをスキップしたいと思います。
├── placeholderBl
│ ├── doc
│ │ ├── my_suites.cfg
│ │ └── src
│ ├── my_suites.cfg
│ ├── someFolderIfU
│ ├── innerModuleSwU
│ │ ├── export
│ │ ├── src
│ │ └── test
│ │ ├── bin
│ │ │ └── my_suites.cfg
│ │ └── src
│ ├── test
│ │ ├── bin
│ │ │ ├── build.spec
│ │ │ ├── my_suites.cfg
│ │ ├── src
答え1
#!/bin/bash
for folder in $(find / -type d 2>/dev/null | grep Bl | grep test) ;do
[ -f "$folder"/my_suites.cfg ] || continue
cd "$folder"
make whatever
cd -
done