Execute o comando dentro do primeiro diretório de cada resultado correspondente

0

Estou trabalhando em um cliente que possui um projeto em que o código é uma mistura de diferentes sistemas de controle de origem. Então, um layout pode ser assim

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

Então, estou tentando montar um comando simples que, quando executado na pasta project , execute o comando hg / svn apropriado em cada projeto, por exemplo:

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

Como o cliente tem muitos desses projetos, eu gostaria de não ter que codificar a estrutura de pastas em um script. Em vez disso, estou procurando uma solução semelhante a find -exec onde os comandos svn / hg são executados automaticamente em cada primeiro nível de correspondência (ou seja, svn up é executado na pasta project / a , mas não no project / a / subfolder ). Como tal comando pode ser construído?

    
por Lars Tackmann 08.08.2011 / 11:05

1 resposta

2

Uma ideia:

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

Edit: talvez algo como

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