在每个匹配结果的第一个目录中执行命令

在每个匹配结果的第一个目录中执行命令

我正在为一个客户工作,他的项目代码是不同源代码控制系统的混合体。因此布局可能是这样的

project/a/.svn
       /a/subfolder/.svn
       /b/.hg
       /c/subproject/.svn
       /d/.hg

因此,我尝试整理一个简单的命令,当从项目文件夹将在每个项目中运行适当的 hg/svn 命令,即:

pushd a/
svn up
popd
pushd b/
hg pull
popd
:

由于客户有许多这样的项目,我希望不必在脚本中对文件夹结构进行硬编码。相反,我正在寻找类似于查找-exec其中SVN/HG命令在每次第一级匹配时自动执行(即svn 上传运行于项目/a文件夹但不在项目/a/子文件夹)这样的命令该如何构造?

答案1

一个想法:

find /project -maxdepth 1 -type d \( -name .svn -execdir svn up \; \
    -o -name .hg -execdir hg pull \; \) 

编辑:也许是类似

find /project \( -execdir test -d {}/.svn \; -execdir sh -c \
    'cd {} && svn update' \; -o -execdir test -d {}/.hg \; \
    -execdir sh -c 'cd {} && hg pull' \; \) -prune

相关内容