하위 디렉터리에서도 명령을 실행하세요.

하위 디렉터리에서도 명령을 실행하세요.

나는 다음과 같은 패턴과 일치하는 모든 하위 디렉터리에서 명령을 실행하는 방법을 알고 있습니다(실행하고 싶다고 가정 gh repo sync).

for d in ./*/ ; do (cd "$d" && gh repo sync) ; done

각 디렉토리의 하위 쉘에서 명령을 실행하십시오.계속해서.

내가 원하는 것은 모든 명령을 병렬로 실행하되 모두 완료될 때까지 기본 스크립트에서 기다리는 것입니다.

우분투 22.04를 사용하고 있습니다. 그게 가능합니까?

답변1

GNU Parallel은 이를 매우 잘 수행합니다. 나는 사용해왔다이 구조장기 매일:

parallel --wd '{}' 'gh repo sync' ::: ./*/.git/..

내 시스템에서 유사한 테스트를 수행했습니다.

$ parallel --wd '{}' 'pwd' ::: ~/my\ projects/*/.git/..
/home/username/my projects/acard
/home/username/my projects/acp01
[125 more]

답변2

백그라운드에서 각 하위 쉘 명령을 실행하고 모두 완료될 때까지 기다립니다.

for d in ./*/
do
    ( cd "$d" && gh repo sync ) &
done
wait

관련 정보