Bash:如何创建一个脚本来处理具有特定子字符串的文件夹并在内部继续递归?

Bash:如何创建一个脚本来处理具有特定子字符串的文件夹并在内部继续递归?

这是一个关于以下问题的后续问题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

相关内容