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