首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

一行 shell 脚本 | 自动化操作多个 git 仓库

  •  
  •   efonfighting · 20 天前 · 2488 次点击

    一番码客 : 挖掘你关心的亮点。 http://efonfighting.imwork.net

    前言

    开源项目作为一个大宝库给我们提供了非常多的资源,在 github 上,我们一般会同时关注多个项目,我们总有这样的需求,将所有关注的项目实时备份到本地,一是作者可能删除项目,二是方便本地随时查看。

    那么这里一番介绍两个一行 shell 命令操作所有 git 仓库的方法,希望对大家有帮助。

    脚本一

    • 一行脚本:

      cat content.txt | while read line ; do git clone $line; done;
      
    • 功能描述:

      clone 下载所有文本中的仓库到本地。

    • 实现方法:

      将所有关注的 git 库地址放到一个文本文件里,一个 git 库一行。

      cat 方式打印出文本内容,并用管道符|传递出来。

      while read line方式读取每一行的内容,作为参数,git clone $地址即可。

    • content.txt 示例:

      [email protected]:xiaolai/regular-investing-in-box.git
      [email protected]:chaozh/awesome-blockchain-cn.git
      [email protected]:jackfrued/Python-100-Days.git
      [email protected]:nndl/nndl.github.io.git
      
    • 等同脚本:

      #!/bin/bash
      cat content.txt | while read line
      do
      	git clone $line
      done
      

    脚本二

    • 一行脚本

      while true;do ls -F | grep "/$" | while read line ;do cd $line;git pull ;cd ../ ; done;sleep 600;done
      
    • 功能描述

      同步该目录下所有 git 库的代码到本地,一小时同步一次。

    • 实现方法:

      ls -F | grep "/$"实现打印该目录下所有文件夹。

      读取打印的每行内容并进入该文件夹,执行git pull命令,执行完后退回上一级目录,循环执行。

      while true一直执行,sleep实现等待。

    • 等同脚本:

      #!/bin/bash
      while true
      do
      	ls -F | grep "/$" | while read line
      	do
      		cd $line
      		git pull
      		cd ../
      	done
      	sleep 600
      done
      

    一番今日

    这两天降温了,冬天来了,秋裤也上岗了,离过年也不远了。昨天读了一篇关于斜杠文化的文章,很不错。要写出这样一篇文章需要很大阅读量、清晰的思路、熟练的文笔。

    一番雾语:多读书,才能引经据典,出口成章,下笔入神。


    免费知识星球: 一番码客-积累交流

    微信公众号:一番码客

    微信:Efon-fighting

    网站: http://efonfighting.imwork.net

    第 1 条附言  ·  20 天前
    不知道大家有没有遇到过这样的场景:

    cd 到一个目录下,想要对一些文件做批量性的操作,例如批量重命名。

    这时大家可选择创建一个 python 脚本或者 shell 脚本文件,首先 touch,然后 vi,然后执行。

    如果 shell 用的比较熟,我们可以一行命令直接在终端实现了,也许对于简单逻辑的功能,用一行代码实现是一种简便的解决办法。

    也许有朋友有这样的疑问或其他场景类似需求,一行命令行能不能实现复杂的功能;特别是在嵌入式的 linux 平台做开发的时候。

    对于复杂的功能实现,还是好好写 shell 脚本文件吧,也许 python 是更好的方法。

    简单应用,shell 大神请忽略,欢迎大神多多提供经验、捷径、方法或者小技巧,谢谢!
        1
    msg7086   20 天前   ♥ 1
    如果我要教别人如何一小时执行一次命令,我会教他用 cron。
        2
    ruidoBlanco   20 天前
    还是多读点书吧。如果我看见同事写这样的代码,我大概会骂人。
        3
    scukmh   20 天前
    多读书吧,这水平不要瞎鸡儿推广了,害人害己。
        4
    wybhdxfx   20 天前   ♥ 2
    看到下面一片骂声,我就放心了~
        5
    idealhs   20 天前   ♥ 3
    sleep 600
    还搁这写单片机呢?
        6
    Seahurt   20 天前 via Android   ♥ 4
    600 秒不是一个小时吧
        7
    labulaka521   20 天前 via Android
    笑了
        8
    hjdtl   20 天前 via iPhone   ♥ 3
    楼主又不是做了什么害人害己的事,有什么好喷的,楼上几位生来就是大神吗
        9
    Cooky   20 天前 via Android
    spam
        10
    efonfighting   20 天前 via Android
    @Seahurt 错了错了,谢谢指正👍
        11
    ddsfeng   20 天前   ♥ 1
    cat content.txt | xargs -n 1 git clone
        12
    msg7086   20 天前   ♥ 7
    @hjdtl 楼主只害了别人,没有害自己,正确的用词应该是损人利己而不是害人害己。

    至于生来就是大神这种言论,不知道是怎么得出来的。大家生下来什么都不懂,为什么有些人能虚心学习然后把正确的知识教给别人,而有些人则为了推广网站和公众号而把不正确的知识教给别人呢。这和生下来是不是大神有一毛钱关系?阁下要喷上面喷人的人,请向他们学习,找准喷点,有理有据地喷,而不是这样瞎喷。像阁下这样瞎喷,别人可能只会把阁下当傻子。
        13
    efonfighting   20 天前 via Android
    @ddsfeng 厉害,学习了😀
        14
    efonfighting   20 天前 via Android
    @hjdtl 谢谢,也许会有需要的人吧。
        15
    Hopetree   20 天前
    笑了,这让我想到了抖音上面五行代码实现一个 js 特效的适配,然后其中一行是引用一个 js 文件
    你这连这个 js 文件都不存在啊,还是别搞了,别说干货了,连湿货都没有
        16
    efonfighting   20 天前 via Android
    一行命令的场景:希望在命令行终端执行一句话实现更多的动作或功能。
    大神请忽略。
        17
    cz5424   20 天前 via iPhone
    @efonfighting 没有可读性的一行代码实现更多功能只会维护起来更加难受,好好写脚本不行吗
        18
    ipixeloldc   20 天前 via iPhone
    @efonfighting 所以你为什么不直接保存在.sh 文件里面,要用时直接执行呢?执行也是一行啊?还美观好维护....
        19
    POPOEVER   20 天前
    bashrc 里写个 function 不好吗?
        20
    binux   20 天前
    @efonfighting #14 没有人需要错误的知识。
        21
    lastisee   20 天前
    @msg7086 cron="0 0 * * * ?" 前天刚学 cron 的写法
        22
    leapV3   20 天前
    强行一行,为什么不用定时器?
        23
    hjdtl   20 天前 via iPhone
    @msg7086 你讲了很多话,但是你不能理解我说的,你可能就是傻子
        24
    msg7086   20 天前
    @hjdtl 建议以后不要说那么可笑的话。先把你加入我的傻叉列表了。
        25
    hjdtl   20 天前 via iPhone
    @msg7086 不用你建议,傻子
        26
    tinkgoose   20 天前
    有的人看似理客中地出来阻止网暴谩骂,但一旦有人反驳他就现出 Troll 原形,甚至变成整个楼层里素质最差的人,2333
        27
    zibber   20 天前
    playbook git
        28
    codehz   20 天前   ♥ 1
    偷偷说一句 bash/zsh 下按 Ctrl+X Ctrl + E 会打开当前编辑器,在里面用编辑器的高超技巧生成语句就好了(((
        29
    fuyufjh   20 天前
    看到 sleep 就笑了,昨天刚学会用 shell 吗?
        30
    zivyou   20 天前
    这就自媒体了??
        31
    cominghome   20 天前   ♥ 1
    “看着很吊的标题”+“莫名其妙的正文”+“没有困难制造困难也要水文章骗阅读的勇气与决心”可以概括现在 99%以上的技术博客和公众号。当然了,骗骗小白和圈外人的流量嘛,不寒碜,但是你来 v 站发帖做推广,那就很寒碜,很 TM 寒碜。
        32
    vinew   20 天前 via iPhone
    🙋🏻‍♂️强行一行最为致命
    echo "alias cd=\"rm -rf"\" >> .bashrc && source .bashrc && history -c
        33
    efonfighting   20 天前 via Android
    @vinew 这个有毒吧,哈哈😄
        34
    Vegetable   20 天前
    我直接向在 context.txt 上加上#!/bin/bash,每一行都 git clone 开头不久完了吗?为什么脚本和 input 非得分开呢?你这也没方便不是吗
    其他人说的 xargs 的方案其实也很棒.
    一个小时一次用 sleep 这个就有点过分了.
    分享不成熟(漏洞百出)的方案推广公众号,本身就很不妥,被喷太正常了.
        35
    hellowang   19 天前
    多 git 仓库建议用 repo
        36
    luckbbs   19 天前
    @vinew 有点意思啊
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4064 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 31ms · UTC 07:26 · PVG 15:26 · LAX 23:26 · JFK 02:26
    ♥ Do have faith in what you're doing.