这是一个关于以下问题的后续问题Bash:在每个目录中使用文件 my_suites.cfg 执行命令?
原问题答案中的全局递归迭代有点太强了。我想通过检查处理的文件夹的名称来限制它。
- 我将在根文件夹中执行此脚本,该文件夹包含带有子字符串 Bl 的文件夹。
- 每个 Bl 文件夹内都有一个子文件夹,其中包含子字符串 test。
- 在 *test 文件夹内通常有一个包含 my_suites.cfg 的 bin 文件夹。我想在这里执行 make 命令的变体。
*Bl 文件夹中还有更多子文件夹,其中包含子字符串 LwU,其中将包含 my_suites.cfg 的类似结构。前面的答案使用全局迭代,它将遍历所有这些并且花费太长时间。
是否可以在迭代期间检查文件夹名称的子字符串,以便跳过任何带有子字符串 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