我想立刻清理所有的maven项目。但我想避免一步一步地遍历所有文件夹并调用mvn clean
。所以我想用find命令做这件事。我尝试了以下电话:
find . -name pom.xml -exec mvn clean {} \;
结果是错误消息: find:缺少“-exec”的参数。
现在我的问题:是否可以使用 find 和 exec 进行此类调用?我以为我可以使用每个命令作为 find -exec 的参数。
提前致谢
哈迪
答案 0 :(得分:7)
你应该使用撇号:
find . -name pom.xml -exec mvn clean '{}' \;
至于我,我使用这个命令
find . -name 'target' -a -type d -exec rm -rfv '{}' \;
这将删除所有目标文件夹。
答案 1 :(得分:1)
我不确定哪个版本的mvn命令支持像那样指定pom文件,但对于例如Maven 3.x不起作用。我们需要一个小小的改变。使用 -execdir 运行,它会自动将我们的目录更改为找到的pom文件的位置(通常比-exec更安全):
find . -name pom.xml -execdir mvn clean \;
或使用指定的备用pom文件选项 -f :
find . -name pom.xml -exec mvn clean -f '{}' \;
答案 2 :(得分:0)
如果您和我一样,检查了很多 Maven 项目,建议的方法可能需要几个小时。 我目前检查了 700 个项目。
find . -maxdepth 3 -type f -name pom.xml |
sed 's|/pom.xml$|/target|' |
xargs -I{} bash -c '[ -d {} ] && echo {}' |
xargs -I{} bash -c 'mvn clean -f "$(sed "s|/target$|/pom.xml|" <<< "{}")"'
我在这里做的是在应用 clean 命令之前测试目标文件夹是否存在。
这使得我不会激活 maven,除非有理由,然后执行时间与我最近工作的项目成线性关系,而不是项目总数。
您可能还需要调整一下 maxdepth,以防我的号码不符合您的要求。