다음 형식의 여러 디렉터리가 있습니다.
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 '{}' \;
확인하다사람들이 발견했습니다기호 링크 처리 방법이나 검색 깊이를 제어하는 옵션입니다.