二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • Shell编程

    • 如何让不断增加的目录只保留五个文件
      • 1,使用扩展通配符
      • 2,find 命令法
      • 3,脚本
    • 那些使用字符画出来的画
    • 业务中期的日志备份操作过程
    • 关于sed命令当中包含变量的坑
    • 利用shell脚本将博客数据库备份到邮箱附件
  • Go编程笔记

  • 前端编程笔记

  • Go学习笔记

  • Vue-21年学习笔记

  • Vue-22年重学笔记

  • 编程世界
  • Shell编程
二丫讲梵
2018-05-17
目录

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

文章发布较早,内容可能过时,阅读注意甄别。

今天有一个小需求。

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

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

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

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

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

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

# 1,使用扩展通配符

首先开启扩展通配符

shopt -s  extglob
1

也可以先查看是否开启

shopt -s
1

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

rm -rf !(1.tt)
1

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

再看第二个。

# 2,find 命令法

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

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

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

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

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

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


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

image

# 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

扔到服务器验证一下。

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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
微信 支付宝
上次更新: 2024/07/04, 22:40:37
那些使用字符画出来的画

那些使用字符画出来的画→

最近更新
01
从赵心童世锦赛夺冠聊聊我的斯诺克情缘
05-16
02
学习周刊-总第211期-2025年第20周
05-15
03
记录二五年五一之短暂回归家庭
05-09
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式