Я работаю с клиентом, у которого есть проект, в котором код представляет собой смесь различных систем контроля версий. Таким образом, макет может быть таким

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
:

Поскольку у клиента есть много таких проектов, я был бы признателен за отсутствие необходимости жестко кодировать структуру папок в скрипте. Вместо этого я ищу решение, похожее на find -exec, где команды svn/hg автоматически выполняются на каждом первом уровне соответствия (т. Е. Svn up запускается в проекте / папке, но не в подпапке проекта /a /). Как можно создать такую команду?

1 ответ1

2

Одна идея:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .