여러 개의 프로젝트 디렉토리 가 있습니다 project-one
. 로 시작하는 모든 디렉토리에서 실행 하고 싶습니다 . 이 작업을 수행 하는 데 사용할 수 있는 것이 있나요 ? 어떻게 해야 하나요?project-two
different-project
./gradlew clean build
project-
xargs
답변1
다음 마크업을 사용하므로 zsh
:
for dir (project-*/gradlew(N*:h)) (cd $dir && ./gradlew clean build)
이것은 찾고있다실행 가능 파일( ) 이름이 시작하는 현재 작업 디렉토리의 하위 디렉토리에 있는 파일 *
(디렉토리에 대한 기호 링크도 고려됨)은 ead를 사용하여 디렉토리 자체를 생성하고 각각은 현재 작업 디렉토리를 넣는 하위 쉘을 시작합니다. 디렉터리는 성공할 경우 실행되는 이 하위 쉘에 일시 중지됩니다.gradlew
project-
h
for
dir
(...)
c
d
dir
./gradlew clean build
cd
그렇게 하는 것은 xargs
고통스러울 것입니다 . 이렇게 하고 싶은 한 가지 이유는 여러분이 xargs
GNU 프로젝트의 프로젝트이고 여러 개를 병렬로 실행하려는 경우 입니다 gradlew
.
예를 들어.
xargs -r0 -P4 -n1 -a <(print -rNC1 project-*/gradlew(N*:h)) \
sh -c 'cd "$1" && exec ./gradlew clean build' sh
병렬로 실행되면 모든 사람이 4
sh
일치 하는 디렉터리를 가져와서 실행합니다 .P
1
cd
./gradlew clean build