我想从根目录中找到包含特定文件名 (pom.xml) 的所有目录,然后 cd 到该目录并执行命令。我可以在脚本中执行此操作,但我希望使用单行命令执行此操作。
到目前为止
find . -type f -name 'pom.xml' |sed 's#\(.*\)/.*#\1#'
这给出了我需要的目录...现在我需要进入每个目录并执行我的命令
答案1
find 有 -exec 和 -execdir。对于 maven 构建,你可以这样做
# executes `mvn clean install` in any directory where pom.xml was found
find . -name pom.xml -execdir mvn clean install \;
答案2
这将找到目录:
find . -name pom.xml -printf '%h\n'
然后您可以读取目录并运行命令:
find . -name pom.xml -printf '%h\n' | while read dir; do ( cd "$dir"; command ... ) done
如果您对目录名中嵌入的换行符感到疑惑(说真的,人们怎么了?),您可以在 printf 中使用“\0”,然后使用它xargs
来运行命令:
find . -name pom.xml -printf '%h\0' | xargs -0 -L 1 sh -c 'dir="$0"; cd "$dir"; command ...'
答案3
还有:
find . -type f -exec mvn -f {} clean install \;
但是,我认为您应该查看可用的 Maven 选项来执行此操作。虽然它在 Maven 3.x 中不再存在,但 Maven 2.x 具有-r
执行此操作的选项。更好的方法是创建一个pom.xml
包含所需文件作为模块的聚合,然后您可以使用-rf
和-pl
有选择地选择要构建的文件。
答案4
怎么样:
find / -type f -name 'pom.xml' -print | while read FILE; do cd `dirname ${FILE}` && /run/my/script; done
如果您可以更改脚本以便它以目录作为参数,那么以下操作应该可以工作:
find / -type f -name 'pom.xml' -exec /run/my/script `dirname {}` \;