#!/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目录下。