shell脚本实现定时删除,保留最新3份文件

shell脚本实现定时删除,保留最新3份文件
长青最近又开了一台服务器专门用来储存网站源码+数据库
正好写一篇文件记录一下,也给大家一个例子看看

长青这里有两台服务器,A和B,A是运行网站的,B是用来存储数据的
首先呢,现在A服务器把定时备份的数据库和源码每隔1小时发送到B服务器的备份目录中
shell脚本如下:

#!/bin/bash
while true
do
  yuanma=$(ls /www/backup/site/ | tail -1)
  sql=$(ls /www/backup/database/ | tail -1)
  scp /www/backup/site/"$yuanma" ip:/root/haitangw.cc_bak/yuanma/
  scp /www/backup/database/"$sql" ip:/root/haitangw.cc_bak/sql/
  sleep 1h
done

首先使用ls命令列出指定目录下的所有文件然后,通过tail命令选择最新的一个文件进行复制。最后,scp命令用于将该文件从本地主机发送到远程主机的根目录中。在这个例子中,我们使用了变量yuanma来存储最新文件的文件名,以便在scp命令中使用。sleep命令用于休眠一段时间,单位为小时,因此在每次循环结束后等待1小时,然后重复同样的复制过程。

接下来就是编写B服务器中定时保留最新3份文件的脚本

#!/bin/bash
while true
do
  # 获取目录下所有log文件,按照修改时间排序
  num1=($(ls -t /root/haitangw.cc_bak/yuanma/))
  num2=($(ls -t /root/haitangw.cc_bak/sql/))
  
  # 计算需要删除的文件数量
  yuanma=$((${#num1[@]}-3))
  sql=$((${#num2[@]}-3))

  # 删除旧文件
  if [[ $yuanma -gt 0 ]]; then
    for (( i=0; i<$yuanma; i++ ))
    do
      rm "${num1[$i]}"
    done
  fi

  # 删除旧文件
 if [[ $sql -gt 0 ]]; then
    for (( i=0; i<$sql; i++ ))
    do
      rm "${num2[$i]}"
    done
  fi

  sleep 1h
done

在每个循环中,使用ls命令列出指定目录下所有的文件,并按照修改时间从新到旧排序。然后,通过计算需要删除的文件数量(即文件总数减去要保留的文件数),对旧文件进行删除。根据这个计算结果,使用一个for循环来遍历列表,删除前面的文件。
最后,使用sleep命令等待一小时,然后重复同样的操作。请注意,如果没有足够的旧文件需要删除,for循环将不会被执行。

上面用的while+sleep做得定时,大家启动的时候可以加个&符号后台运行
但是也有缺点,这种容易挂掉,大家可以换成crontab定时任务比较好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值