制作该脚本主要是为了备份confluence中的备份文件到另外一台电脑上,做一下异地备份,前提是要将异地文件夹挂载到此服务器中,该脚本可以使用crontab定时运行
功能:
- 备份指定文件夹内的文件到另外一个文件夹
- 保留最新的n份
- 输出每次的运行日志
废话不多说,直接上代码,上面有注释
#!/bin/bash
if [ ! -n "$1" ]; then
echo "请输入需保留最后几份"
exit 8
fi
from="/var/atlassian/application-data/confluence/backups/"
to="/nas/"
file_name="backup"
# 获取nas和back中最新文件
nas_new_file=$(ls -t $to | grep $file_name | head -n 1)
bak_new_file=$(ls -t $from | grep $file_name | head -n 1)
# 判断需不需要拷贝
if [ $nas_new_file == $bak_new_file ];then
echo "已经是最新啦!无需拷贝最新备份"
else
echo "nas没有最新备份,开始拷贝最新备份"
# 拷贝最新的
cp "$from$bak_new_file $to"
echo "拷贝完毕~~"
fi
file_num=$(ls -l $to | grep "^-" | wc -l)
if [ $file_num -gt $1 ]; then
echo "nas中文件数量超过"$1"份,需删除老文件,开始删除"
# 计算出要删除最近几份的数量
del_near_num=$(($1+1))
# 将/nas/目录下的所有文件按照修改时间从近到远排序
files=$(ls -r $to)
# 删除/nas/目录中除了最新的3个文件之外的所有文件
for file in $(echo "$files" | tail -n +$del_near_num); do
rm -rf "$to$file"
done
echo "删除完毕"
else
echo "nas中文件数量不超过"$1"份,无需删除老文件"
fi
说明
注意替换from和to,运行时,记得传参,传入要保留最新多少份,file_name是你要备份文件的文件名特征,防止文件夹内有其他杂乱的文件影响备份