주어진 접두사로 시작하는 모든 하위 디렉터리에서 "gradlew clean build"를 실행하는 방법은 무엇입니까?

주어진 접두사로 시작하는 모든 하위 디렉터리에서 "gradlew clean build"를 실행하는 방법은 무엇입니까?

여러 개의 프로젝트 디렉토리 가 있습니다 project-one. 로 시작하는 모든 디렉토리에서 실행 하고 싶습니다 . 이 작업을 수행 하는 데 사용할 수 있는 것이 있나요 ? 어떻게 해야 하나요?project-twodifferent-project./gradlew clean buildproject-xargs

답변1

다음 마크업을 사용하므로 zsh:

for dir (project-*/gradlew(N*:h)) (cd $dir && ./gradlew clean build)

이것은 찾고있다실행 가능 파일( ) 이름이 시작하는 현재 작업 디렉토리의 하위 디렉토리에 있는 파일 *(디렉토리에 대한 기호 링크도 고려됨)은 ead를 사용하여 디렉토리 자체를 생성하고 각각은 현재 작업 디렉토리를 넣는 하위 쉘을 시작합니다. 디렉터리는 성공할 경우 실행되는 이 하위 쉘에 일시 중지됩니다.gradlewproject-hfordir(...)cddir./gradlew clean buildcd

그렇게 하는 것은 xargs고통스러울 것입니다 . 이렇게 하고 싶은 한 가지 이유는 여러분이 xargsGNU 프로젝트의 프로젝트이고 여러 개를 병렬로 실행하려는 경우 입니다 gradlew.

예를 들어.

xargs -r0 -P4 -n1 -a <(print -rNC1 project-*/gradlew(N*:h)) \
  sh -c 'cd "$1" && exec ./gradlew clean build' sh

병렬로 실행되면 모든 사람이 4 sh일치 하는 디렉터리를 가져와서 실행합니다 .P1cd./gradlew clean build

관련 정보