如何在以给定前缀开头的所有子目录中运行“gradlew clean build”?

如何在以给定前缀开头的所有子目录中运行“gradlew clean build”?

我有多个项目目录project-one,,project-twodifferent-project我想./gradlew clean build在所有以 . 开头的目录中运行project-。我可以用来xargs这样做吗?我怎样才能做到这一点?

答案1

由于您使用以下标记zsh

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

这就是寻找可执行文件当前工作目录的子目录中的( *)文件,其名称以(也会考虑到那里的目录的符号链接),使用它们的ead 来生成目录本身,并且每个启动一个子 shell,在其中我们将当前工作目录挂起到该子 shell如果成功则运行。gradlewproject-hfordir(...)cddir./gradlew clean buildcd

这样做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 shP每个人都会获取1那些匹配的目录,cd进入其中并运行./gradlew clean build

相关内容