shell脚本之保留最新文件

shell脚本之保留最新文件

 

需求:目录下只保留5个最新文件。

  该需求一般用于备份,这里使用根据文件的修改时间或者创建时间来判断删除,保留最新的5个文件。

#!/bin/bash
#存放文件的目录
addr="/opt/bak"
#保留最新文件个数
file_save_num=5

#目录下文件总数
file_num=`ls $addr | wc -l`
#文件总数大于保留个数则删除,否则不进行任何操作
if [[ $file_num -gt $file_save_num ]] ;then
    #根据多余的文件数量进行循环
    for (( i=0; i<$(($file_num - $file_save_num));i++ ))
    do
        #获取到最旧的文件名称
        remove_file_name=`ls -t $addr | tail -n 1`
        #删除文件
        rm -f  $addr/$remove_file_name
    done
fi

  注意:该脚本需要目录下为纯文件的场景,并未判断目录的情况。

 

需求案例:每天备份mysql数据库数据,保留5天

  1、创建备份目录和脚本存放目录

mkdir -p /opt/{mysql_data_backup,shell}

  2、创建shell脚本

   vim /opt/shell/back_mysql_test.sh

#!/bin/bash
#存放文件的目录
addr="/opt/mysql_data_backup/test"
#保留最新文件个数(按修改时间排序)
file_save_num=5
#数据库地址
db_addr="192.168.1.11"
#数据库端口
db_port=3306
#数据用户
db_user="root"
#数据库密码
db_passwd="root"
#数据库名称
db_name=test

#备份数据库
mysqldump -u $db_user -p$db_passwd -h $db_addr -P $db_port -B $db_name > $addr/${db_name}-$(date +%Y.%m.%d)

#目录下文件总数
file_num=`ls $addr | wc -l`
#文件总数大于保留个数则删除,否则不进行任何操作
if [[ $file_num -gt $file_save_num ]] ;then
    #根据多余的文件数量进行循环
    for (( i=0; i<$(($file_num - $file_save_num));i++ ))
    do
        #获取到最旧的文件名称
        remove_file_name=`ls -t $addr | tail -n 1`
        #删除文件
        rm -f  $addr/$remove_file_name
    done
fi

  3、配置定时任务,每天0点执行脚本

crontab -e
00 00 * * * /usr/bin/sh /opt/shell/back_mysql_test.sh

 

 
posted @ 2024-09-25 11:18  难止汗  阅读(58)  评论(0编辑  收藏  举报