Виконайте команду всередині першої каталки кожного відповідного результату


0

Я працюю у клієнта, який має проект, де код - це суміш різних систем управління джерелами. Тож макет може бути таким

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 вгору запускається в проекті / папці, але не в папці project / a / ). Як можна побудувати таку команду ?.

Відповіді:


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

Чудово, хоча шви "maxdepth" працюють на рівні пошуку, а не на рівні результату (тобто у наведеному вище прикладі / c / subproject / також міститься реверсійна підривна система, яка потім має глибину 3 від кореня). Що я хочу зробити, - це виконати команду svn / hg у першій папці, з якою я стикаюсь, що є репо, ця папка може бути довільно вкладена).
Lars Tackmann

Спробуйте відредаговану версію і подивіться, чи працює вона.
jw013

Дякую, це працює як слід (команди виконуються у всіх правильних каталогах). Залишилося лише те, що він знаходить один і той же каталог декілька разів (виконання оновлень svn / hg - це досить трудомістка операція). Цікаво, чи можна якось підкинути унікальний варіант.
Lars Tackmann

1
Хм, сподіваюсь, 3-й раз - це чарівність.
jw013

ось це;) - спасибі багато, я повинен отримати більше сили "знайти"
Lars Tackmann
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.