다음 질문에 대한 후속 질문입니다.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