Linux shell案例:获取github上一个人所有仓库

12 篇文章 1 订阅
10 篇文章 0 订阅
  1. 前提:从github上下载一个人所有仓库,仓库数量93个,要是手动下,呵呵

  2. 想从网上找现成的轮子,发现有一个2013年的博客https://blog.csdn.net/kkme88/article/details/12651065,里面的脚本已经不适用现在的网页结构

  3. 刚好学习Linux shell,自己动手写一个

  4. 过程难点

    1. 正则提取下载链接,在我的一篇博客中,Java正则表达式,写了一些正则表达式的用法,在最后的例子中,有获取<p></p>标签中间内容的正则,可以用来获取网页a标签中href内容

    2. github上仓库的链接就是以下,需要提取 href=" 和 "> 之间的内容

      <a itemprop="name codeRepository" data-hovercard-type="repository" data-hovercard-url="/opencv/opencv/hovercard" href="/opencv/opencv">
      
    3. 获取分页数,我采用的方法是提取page=后的数字,然后排序,最大值就是分页数

      <a rel="next" href="/spring?page=2">2</a> <a class="next_page" rel="next" href="/spring?page=2">Next</a></div>
      
  5. 脚本代码

    #!/bin/bash
    
    git_host="https://github.com"
    tmp_log="tmp_repos.log"
    
    
    function gitclone()
    {
      username=$1
      if [ ! -d $username ];then
      	mkdir -p $username
      fi
      cd $username
      if [ -f $tmp_log ];then
      	rm $tmp_log
      fi
      
      # 查找分页数,发现两种,一种找到总仓库数,再得到页数,另一种是直接找到最大的页码,这里选择第二种
      curl $git_host/$username?tab=repositories | grep page= | grep -oP '(?<=href=").*?(?=">)'|sort > $tmp_log
      pageNum=$(grep 'page=' $tmp_log | tail -n 1 | grep -oP '[0-9]?')
      echo $pageNum
      rm $tmp_log
      
      #是否分页
      if [ ! $pageNum ];then
        curl $git_host/$username?tab=repositories | grep codeRepository | grep -oP '(?<=href=").*?(?=")' > $tmp_log
      else
        for ((i=1;i<=$pageNum;i++))
      	do
      	   curl "$git_host/$username?tab=repositories&page=$i" | grep codeRepository | grep -oP '(?<=href=").*?(?=")' >> $tmp_log
      	done
      fi
      
      cat $tmp_log | while read line
    	do
            # 找到仓库的名字
            name=$(basename $line)
            # 方式一:下载zip包
            wget https://codeload.github.com$line/zip/master -O $name.zip
            # 方式二:git clone 
            # git clone https://github.com$line.git
    	done
      rm $tmp_log
    }
    
    gitclone $1
    
    
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aabond

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值