一行 shell 脚本 | 自动化操作多个 git 仓库 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
efonfighting
V2EX    程序员

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

  • &bsp;
  •   efonfighting 2019-11-20 08:16:32 +08:00 5938 次点击
    这是一个创建于 2166 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一番码客 : 挖掘你关心的亮点。 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 条附言    2019-11-20 12:06:25 +08:00
    不知道大家有没有遇到过这样的场景:

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

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

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

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

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

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

    至于生来就是大神这种言论,不知道是怎么得出来的。大家生下来什么都不懂,为什么有些人能虚心学习然后把正确的知识教给别人,而有些人则为了推广网站和公众号而把不正确的知识教给别人呢。这和生下来是不是大神有一毛钱关系?阁下要喷上面喷人的人,请向他们学习,找准喷点,有理有据地喷,而不是这样瞎喷。像阁下这样瞎喷,别人可能只会把阁下当傻子。
    efonfighting
        13
    efonfighting  
    OP
       2019-11-20 09:37:42 +08:00 via Android
    @ddsfeng 厉害,学习了
    efonfighting
        14
    efonfighting  
    OP
       2019-11-20 09:41:01 +08:00 via Android
    @hjdtl 谢谢,也许会有需要的人吧。
    Hopetree
        15
    Hopetree  
       2019-11-20 09:41:32 +08:00
    笑了,这让我想到了抖音上面五行代码实现一个 js 特效的适配,然后其中一行是引用一个 js 文件
    你这连这个 js 文件都不存在啊,还是别搞了,别说干货了,连湿货都没有
    efonfighting
        16
    efonfighting  
    OP
       2019-11-20 09:43:19 +08:00 via Android
    一行命令的场景:希望在命令行终端执行一句话实现更多的动作或功能。
    大神请忽略。
    cz5424
        17
    cz5424  
       2019-11-20 10:02:29 +08:00 via iPhone
    @efonfighting 没有可读性的一行代码实现更多功能只会维护起来更加难受,好好写脚本不行吗
    ipixeloldc
        18
    ipixeloldc  
       2019-11-20 10:11:43 +08:00 via iPhone
    @efonfighting 所以你为什么不直接保存在.sh 文件里面,要用时直接执行呢?执行也是一行啊?还美观好维护....
    POPOEVER
        19
    POPOEVER  
       2019-11-20 10:19:56 +08:00
    bashrc 里写个 function 不好吗?
    binux
        20
    binux  
       2019-11-20 10:23:48 +08:00
    @efonfighting #14 没有人需要错误的知识。
    lastisee
        21
    lastisee  
       2019-11-20 10:27:03 +08:00
    @msg7086 cron="0 0 * * * ?" 前天刚学 cron 的写法
    leapV3
        22
    leapV3  
       2019-11-20 10:55:16 +08:00
    强行一行,为什么不用定时器?
    hjdtl
        23
    hjdtl  
       2019-11-20 10:55:30 +08:00 via iPhone
    @msg7086 你讲了很多话,但是你不能理解我说的,你可能就是傻子
    msg7086
        24
    msg7086  
       2019-11-20 11:00:59 +08:00
    @hjdtl 建议以后不要说那么可笑的话。先把你加入我的傻叉列表了。
    hjdtl
        25
    hjdtl  
       2019-11-20 11:02:40 +08:00 via iPhone
    @msg7086 不用你建议,傻子
    tinkgoose
        26
    tinkgoose  
       2019-11-20 11:06:23 +08:00
    有的人看似理客中地出来阻止网暴谩骂,但一旦有人反驳他就现出 Troll 原形,甚至变成整个楼层里素质最差的人,2333
    zibber
        27
    zibber  
       2019-11-20 11:23:45 +08:00
    playbook git
    codehz
        28
    codehz  
       2019-11-20 12:32:15 +08:00   1
    偷偷说一句 bash/zsh 下按 Ctrl+X Ctrl + E 会打开当前编辑器,在里面用编辑器的高超技巧生成语句就好了(((
    fuyufjh
        29
    fuyufjh  
       2019-11-20 13:13:40 +08:00
    看到 sleep 就笑了,昨天刚学会用 shell 吗?
    zivyou
        30
    zivyou  
       2019-11-20 14:01:14 +08:00
    这就自媒体了??
    cominghome
        31
    cominghome  
       2019-11-20 14:03:36 +08:00   1
    “看着很吊的标题”+“莫名其妙的正文”+“没有困难制造困难也要水文章骗阅读的勇气与决心”可以概括现在 99%以上的技术博客和公众号。当然了,骗骗小白和圈外人的流量嘛,不寒碜,但是你来 v 站发帖做推广,那就很寒碜,很 TM 寒碜。
    vinew
        32
    vinew  
       2019-11-20 14:26:56 +08:00 via iPhone
    ♂强行一行最为致命
    echo "alias cd=\"rm -rf"\" >> .bashrc && source .bashrc && history -c
    efonfighting
        33
    efonfighting  
    OP
       2019-11-20 14:29:32 +08:00 via Android
    @vinew 这个有毒吧,哈哈
    Vegetable
        34
    Vegetable  
       2019-11-20 14:34:56 +08:00
    我直接向在 context.txt 上加上#!/bin/bash,每一行都 git clone 开头不久完了吗?为什么脚本和 input 非得分开呢?你这也没方便不是吗
    其他人说的 xargs 的方案其实也很棒.
    一个小时一次用 sleep 这个就有点过分了.
    分享不成熟(漏洞百出)的方案推广公众号,本身就很不妥,被喷太正常了.
    hellowang
        35
    hellowang  
       2019-11-20 18:02:21 +08:00
    多 git 仓库建议用 repo
    luckbbs
        36
    luckbbs  
       2019-11-21 06:55:37 +08:00
    @vinew 有点意思啊
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2728 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 06:22 PVG 14:22 LAX 23:22 JFK 02:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86