Циклический перебор подкаталогов и выполнение команды в каждом из них

у меня есть набор репозиториев, отсортированных по каталогам на основе их VCS (Git, Mercurial, SVN). С Subversion мне удалось запустить svn update * в Родительском каталоге, и он будет перебирать каждый каталог и обновлять каждый репозиторий, как ожидалось. Это не относится к Git или Mercurial.

Я хотел бы придумать сценарий bash, который я могу запустить, чтобы сделать именно это, перебирать каталоги и либо git pull или hg pull в каждой. Я просто не много скриптах bash опыт.

25
задан Bryan Veloso
20.03.2023 5:10 Количество просмотров материала 2508
Распечатать страницу

5 ответов

for dir in ~/projects/git/*; do (cd "$dir" && git pull); done
72
отвечен jtimberman 2023-03-21 12:58

Если вам нужно, чтобы он был рекурсивным:

find . -type d -name .git -exec sh -c "cd \"{}\"/../ && pwd && git pull" \;

это спустится во все каталоги в текущем, и выполнить git тянуть на тех подкаталогах ,которые имеют.git каталог (вы можете ограничить его -maxdepth).

18
отвечен Dennis Williamson 2023-03-21 15:15

Если у вас GNU Parallel http:// www.gnu.org/software/parallel / installed вы можете сделать это:

cd ~/projects/git/; ls | parallel 'cd {} && git pull'

Это будет работать параллельно, так что если некоторые из сетевых подключений git серверов ' медленно это может ускорить вещи.

посмотрите вступительное видео для GNU Parallel, чтобы узнать больше: http://www.youtube.com/watch?v=OpaiGYxkSuQ

7
отвечен Ole Tange 2023-03-21 17:32

Это должно работать

find . -maxdepth 1 -type d -name '.git' -exec sh -c 'cd "{}" && pwd && git pull' \;
3
отвечен mj41 2023-03-21 19:49

для этого рекурсивные без использования find но forloop

for dir in ~/projects/git/*/*/; do (cd "$dir" && git pull); done
0
отвечен loretoparisi 2023-03-21 22:06

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх