我有多个项目目录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 来生成目录本身,并且每个启动一个子 shell,在其中我们将当前工作目录挂起到该子 shell如果成功则运行。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
。