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

В чем разница между "Shell" и "Terminal"? [дубликат]
Excel; экспорт / импорт различных столбцов в различные файлы csv
Таймер работает под скриптом bash в диалоговом окне
ограничить rsync (или сценарий bash) каталогом
утилита командной строки для записи с микрофона
Проблема с передачей файла из linux в windows с помощью smbclient
Как распечатать команду bash history и добавить ее в файл?
Скрипт автоматического удаления файлов старше нескольких минут в ubuntu
Linux-Avoid cat: нет такого файла или каталога, когда файл не существует
Знак процента ( % ) перед командой оболочки
Как удалить файл с именем, начинающимся с "- r", используя cli [дубликат]
Как использовать xargs и sed для передачи результатов в массив?
Как я могу удалить все файлы из каталога, имеют определенную длину имени файла?
Перенаправление stdin в stdout
Как запустить скрипт при отключении жесткого диска или перезагрузки?

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

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

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

5
задан Bryan Veloso
источник

5 ответов

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

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

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

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

18
отвечен Dennis Williamson 2012-01-05 03: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-22 20:07:04
источник

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

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

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

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

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