• 对于注定会优秀的人来说,他所需要的,只是时间----博主
  • 手懒得,必受贫穷,手勤的,必得富足----《圣经》
  • 帮助别人,成就自己。愿君在本站能真正有所收获!
  • 如果你在本站中发现任何问题,欢迎留言指正!
  • 宝剑锋从磨砺出,梅花香自苦寒来!
  • 本站开启了防爆破关小黑屋机制,如果您是正常登录但被关进小黑屋,请联系站长解除!

如何让不断增加的目录只保留五个文件?

Shell脚本 eryajf 1年前 (2018-05-17) 1525℃ 已收录 0个评论
本文预计阅读时间 5 分钟

今天有一个小需求。

运维工作就是要学着不断给自己提出一些需求,然后来将这些需求满足,这就叫成长。

因为自己利用了Jenkins构建安卓的构建历史来达到保留历史构建仍可下载的目的,因此对应存放app以及二维码的目录就慢慢变大起来,之前的目标是保留五次的历史可用,那么现在问题来了,如何让目录下只剩下想要的5个文件?

注意:我这里不断增加的文件,首先有其规律,其次规律并不是日期的规律,而是(1.apk,1.jpg),(2.apk,2.jpg),这种的递增方式增加的,因此通过find的日期参数进行删除是不可行的哦。先把这个排除在外。

一开始自己的想法是利用脚本来完成这件事儿,但是也想看看网上有没有什么比较新奇的实现方法的。

果不其然,遇到有个地方介绍了两种方法,虽然没有最终解决我的需求(因为它所能实现的都是只能排除一个文件),但是也蛮可爱的,特在此一并记录。

这两种方法源自于https://jingyan.baidu.com/article/e75aca851ff15c142fdac64c.html

1,使用扩展通配符

  • 首先开启扩展通配符
  • shopt -s  extglob
    
  • 也可以先查看是否开启
  • shopt -s
    

    在test文件夹下有1.tt、1.png、index.html,现在要删除除1.tt之外的所有文件,则可以执行如下命令

    rm -rf !(1.tt)
    

    利用通配符的功能来进行文件的排除,也是很妙的一个用法,不过我马上拿这个操作进行测试是否支持多个文件的排除在外,发现并不支持,无奈不符合我的需求,放弃。

    再看第二个。

    2,find命令法

    在test文件夹下有1.tt、1.png、index.html,现在要删除除1.tt之外的所有文件,则可以执行如下命令

    find . -not -name "1.tt" -exec rm -rf {} \;
    

    在执行的时候有一个提示,不用管它,因为.和..是系统默认指明为当前目录和上级目录的,不会删除的。

    也可以将find的结果通过xargs进行转换后再交给rm命令处理。

    find . -not -name "1.tt" | xargs rm -rf
    

    这个方法与第一个一样也是无法实现多个文件的排除。哎,自己直接搞个简单脚本吧。


    开始自己的表演之前先来个小福利。

    3,脚本

    于是写了这样一个脚本:

    #!/bib/bash
    set -e
    
    dosome(){
    mv $A /tmp/er
    rm -rf *
    for i in $A
    do
    mv /tmp/er/$i ./
    done
    }
    
    cd /usr/local/nginx/html/er
    A=`ls *.jpg > /tmp/aa.log && tail -n 5 /tmp/aa.log`
    dosome
    
    cd /usr/local/nginx/html/app
    A=`ls *.apk > /tmp/aa.log && tail -n 5 /tmp/aa.log`
    dosome
    

    扔到服务器验证一下。

    ok,个人需求满足,打完收功。

    6与28日补充:

    有一些bug是需要时间来将其呈现的。由于自己之前所面临的都是一百以内的情况,因此测试起来,脚本按之前的也没有毛病,但是由于这个东西太好用,小伙伴们的构建热情非常高涨,很快就超过一百此了,而我却看到,这个目录下有一些毛病了,因为加入定时任务隔段时间一清理,发现只保留到99.apk了。

    废话不多说,直接放上调整后的脚本:

    #!/bib/bash
    set -e
    
    dosome(){
    mv $A /tmp/er
    rm -rf *
    for i in $A
    do
    mv /tmp/er/$i ./
    done
    }
    
    cd /usr/local/nginx/html/er
    A=`ls -lt *.jpg > /tmp/aa.log && head -n 5 /tmp/aa.log |awk '{print $9}'`
    dosome
    
    cd /usr/local/nginx/html/app
    A=`ls -lt *.apk > /tmp/aa.log && head -n 5 /tmp/aa.log |awk '{print $9}'`
    dosome
    

    weinxin
    扫码订阅,第一时间获得更新
    微信扫码二维码,订阅我们网站的动态,另外不定时发送WordPress小技巧,你可以随时退订,欢迎订阅哦~

    二丫讲梵 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明如何让不断增加的目录只保留五个文件?
    喜欢 (1)
    [如果想支持本站,可支付宝赞助]
    分享 (0)
    eryajf
    关于作者:
    学无止境,我愿意无止境学。书山有路,我愿意举身投火,淬炼成金!

    您必须 登录 才能发表评论!