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

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

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

42
задан Bryan Veloso 2009-09-22 01:34:05
источник

5 ответов

for dir in ~/projects/git/*; do (cd "$dir" && git pull); done
72
отвечен jtimberman 2013-06-05 16:26:38
источник

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

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

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

18
отвечен Dennis Williamson 2012-01-05 07:13:41
источник

Если у вас 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 2010-08-23 00:07:04
источник

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

find . -maxdepth 1 -type d -name '.git' -exec sh -c 'cd "{}" && pwd && git pull' \;
3
отвечен mj41 2013-06-05 16:26:12
источник

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

for dir in ~/projects/git/*/*/; do (cd "$dir" && git pull); done
0
отвечен loretoparisi 2016-10-06 15:45:03
источник

Другие вопросы linux shell bash script

X