`sh my_dir/subdir*/qsub.sh` 형식의 모든 스크립트를 실행하는 방법

`sh my_dir/subdir*/qsub.sh` 형식의 모든 스크립트를 실행하는 방법

다음 형식의 여러 디렉터리가 있습니다.

my_dir/subdir*/qsub.sh

각 하위 디렉터리의 모든 항목을 실행하고 싶지만 qsub.sh실행하려고 하면

sh my_dir/subdir*/qsub.sh

qsub.sh단일 하위 디렉터리에 대해서만 실행되는 것 같습니다 . 왜 이런 일을 하는가?

답변1

명령이 작동하지 않는 이유는 쉘이 첫 번째 일치 항목을 실행하고 나머지 일치 항목이 첫 번째 스크립트에 인수로 전달되기 때문입니다.

디렉터리를 반복하고 각 스크립트를 개별적으로 실행해야 합니다.

예를 들어

for script in my_dir/subdir*/qsub.sh ; do
  sh "${script}"
done

답변2

bxm이 이미 말했듯이: 쉘은 명령을 다음으로 확장합니다.

sh my_dir/subdirA/qsub.sh my_dir/subdirB/qsub.sh my_dir/subdirC/qsub.sh

my_dir/subdirA/qsub.s매개변수로 실행 됩니다 .my_dir/subdirB/qsub.sh my_dir/subdirC/qsub.sh

for 루프의 대안은 다음과 같습니다.

find my_dir -name qsub.sh -exec sh '{}' \;

초보자를 위한 확장 팁: 모든 스크립트를 실행 가능하게 만들고( chmod +x) 적절한 shebang으로 시작합니다(예 #!/usr/bin/env sh: ). 그런 다음 스크립트를 실행 가능하게 만들어 활성화할 수 있으며, 실행 논리를 수정하지 않고도 Python, Perl 또는 바이너리와 같은 다른 스크립트 언어를 사용할 수도 있습니다.

그런 다음 찾기를 실행합니다.

find my_dir -type f -executable -name qsub.sh -exec '{}' \;

확인하다사람들이 발견했습니다기호 링크 처리 방법이나 검색 깊이를 제어하는 ​​옵션입니다.

관련 정보