加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 如何快速找到目录下的所有git repos

发布时间:2020-12-15 19:46:57 所属栏目:安全 来源:网络整理
导读:扫描.git目录时,以下bash脚本很慢,因为它查看每个目录。如果我有一个大的存储库的集合,需要很长时间才能查找每个目录,寻找.git。一旦找到一个.git目录,它将会更快地修剪repos中的目录。有什么想法,如何做到这一点,还是有另一种方式来写一个完成同样的
扫描.git目录时,以下bash脚本很慢,因为它查看每个目录。如果我有一个大的存储库的集合,需要很长时间才能查找每个目录,寻找.git。一旦找到一个.git目录,它将会更快地修剪repos中的目录。有什么想法,如何做到这一点,还是有另一种方式来写一个完成同样的事情的bash脚本?
#!/bin/bash

# Update all git directories below current directory or specified directory

HIGHLIGHT="e[01;34m"
NORMAL='e[00m'

DIR=.
if [ "$1" != "" ]; then DIR=$1; fi
cd $DIR>/dev/null; echo -e "${HIGHLIGHT}Scanning ${PWD}${NORMAL}"; cd ->/dev/null

for d in `find . -name .git -type d`; do
  cd $d/.. > /dev/null
  echo -e "n${HIGHLIGHT}Updating `pwd`$NORMAL"
  git pull
  cd - > /dev/null
done

具体来说,你将如何使用这些选项?对于这个问题,你不能假设repos的集合都在同一个目录中;它们可能在嵌套目录中。

top
  repo1
  dirA

  dirB
     dirC
        repo1
查看Dennis在这篇文章中的答案关于find的-prune选项:

How to use ‘-prune’ option of ‘find’ in sh?

find . -name .git -type d -prune

会加快一点,因为find不会下降到.git目录,但它仍然下降到git仓库,寻找其他.git文件夹。这可能是一个昂贵的操作。

什么会很酷是如果有某种查找前瞻性修剪机制,其中如果一个文件夹有一个名为.git的子文件夹,然后修剪该文件夹…

也就是说,我打赌你的瓶颈是在网络操作“git pull”,而不是在find命令,因为其他人发表在评论。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读