#!/bin/bash basePath=$(cd `dirname $0` ; pwd) cd $basePath bakName=bak_Dir bakPath=$basePath/$bakName bakDate=$(date "+%Y-%m-%d-%H-%M-%S") filePath=/usr/local/test echo "当前脚本所在目录:$basePath" echo "备份目录名:$bakName" echo "备份目录完整路径:$bakPath" echo "备份时间:$bakDate" echo "待备份的文件路径:$filePath" #创建备份目录及临时目录 if [ -d $bakPath ];then echo "备份目录已存在:$bakPath" else echo "创建备份目录" mkdir -p $bakPath fi mkdir -p $bakPath/temp cp -rf $filePath $bakPath/temp echo "success" #备份数据库 echo "bakup database starting..." mysqldump -uroot -p123456 test > $bakPath/temp/sql_$bakDate.sql echo "success" echo "压缩备份目录" tar -zcf $bakName/bak_${bakDate}.tgz $bakName/temp/* echo "删除备份目录" rm -rf $bakPath/temp echo "历史文件清理" #仅保留最近10天的数据 find $bakName -mtime +10 -name "*.tgz" -exec rm -rf {} ; #仅保留最近5个文件 fileNum_total=$(ls -l $bakName | wc -l) fileNum_keep=5 fileNum_del=$(($fileNum_total-$fileNum_keep)) echo $fileNum_total echo $fileNum_del ls -tr $bakName | head -${fileNum_del} | xargs rm -rf
find命令使用说明: find [查找路径] 寻找条件 操作: 可接参数: -user 匹配所有者 -mtime -n +n 匹配修改内容的时间(-n指n天以内,+n指内天以前) -name 匹配名称 -iname 匹配名称,不区分大小写 -size 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件) -prune 忽略某个目录 -exec …… {} ; 其中“……”跟用于进一步处理搜索结果的命令 示例: find / -user linuxprobe -exec cp -a {} /root/findresults/ ; 查找linuxprobe这个用户的所有文件,复制该用户下的文件(附带原属性)至root/findresults目录下。