Перемещение по подкаталогам и выполнение команды в каждом

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

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

41 голос | спросил Bryan Veloso 22 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 22 Sep 2009 01:34:05 +0400 2009, 01:34:05

5 ответов


72
for dir in ~/projects/git/*; do (cd "$dir" && git pull); done
ответил jtimberman 22 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 22 Sep 2009 02:04:08 +0400 2009, 02:04:08
17

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

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

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

ответил Dennis Williamson 22 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 22 Sep 2009 02:31:23 +0400 2009, 02:31:23
7

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

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

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

Смотрите видеоролик для GNU. Параллельно узнайте больше: http://www.youtube.com/watch?v=OpaiGYxkSuQ

ответил Ole Tange 23 AM000000120000000431 2010, 00:07:04
3

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

find . -maxdepth 1 -type d -name '.git' -exec sh -c 'cd "{}" && pwd && git pull' \;
ответил mj41 5 J0000006Europe/Moscow 2013, 15:16:54
0

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

for dir in ~/projects/git/*/*/; do (cd "$dir" && git pull); done
ответил loretoparisi 6 +03002016-10-06T15:45:03+03:00312016bEurope/MoscowThu, 06 Oct 2016 15:45:03 +0300 2016, 15:45:03

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132