新建一个脚本文件,将脚本代码复制进去
vim backup.sh
chmod +x backup.sh
将脚本文件放到要备份的文件夹下
执行脚本命令:sh backup.sh 1 & ,代表每1个小时备份一次
备份间隔时间可以是小数:sh backup.sh 0.1 &,代表0.1*3600=360秒
停止备份命令:sh backup.sh stop
# !/bin/bash
#--------------------------------#
# author: Jugier
# date: 2019-12-10
# 作用: 定期备份文件
#--------------------------------#
# ShellFolder 脚本所在路径
# SourceDir 需要备份的目录
# BackDir 备份目录
if [ "$0" == "./backup.sh" ];then
echo "*********************************"
echo "开始备份命令:sh backup.sh 1 &"
echo "参数1是备份时间间隔(小时)"
echo "停止备份命令:sh backup.sh stop"
echo "查看脚本程序号:jobs -l"
echo "*********************************"
exit 0
fi
#**************************************************#
#停止备份程序:
if [ "$1" == "stop" ];then
pidnum=`ps -ef|grep "backup.sh"|grep -v 'grep'|awk '{print $2}'`
kill -9 $pidnum
echo "备份已停止!"
exit 0
fi
#**************************************************#
#备份间隔时间:由脚本第一个参数传递
if [ "$#" -lt "1" ];then
echo "error:没有设置备份间隔时间(小时)"
echo "例:sh backup.sh 1 &"
exit 0
fi
if [ $(echo "$1 > 0.00"|bc) -eq 1 ];then
echo
else
echo "error:传递的参数不是数字"
echo "例:sh backup.sh 1 &"
exit 0
fi
let step=$(echo "$(echo "$1 * 60 * 60" | bc)" | cut -f1 -d".")
echo "*********************************"
echo "备份间隔时间:"$1"小时"
#*************************************************#
#备份目录
ShellFolder=$(cd "$(dirname "$0")";pwd)
SourceDir="${ShellFolder##*/}"
BackDir=$SourceDir".sample"
if [ ! -d "../$BackDir" ];then
mkdir ../$BackDir
fi
#**************************************************#
#开始备份
echo "开始备份"$SourceDir"到"$BackDir
echo "*********************************"
while [ "1" = "1" ]
do
if [ ! -d "../$BackDir" ];then
mkdir ../$BackDir
fi
cp -a $ShellFolder/* ../$BackDir/
str=$(diff ../$SourceDir ../$BackDir |grep Only|awk '{print $4}')
OLD_IFS="$IFS"
#设置分隔符
IFS=","
#如下会自动分隔
arr=($str)
#恢复原来的分隔符
IFS="$OLD_IFS"
sleep 20
#遍历数组,删除备份目录多余的文件
for filename in ${arr[@]}
do
echo "$filename"
rm -rf ../$BackDir/$filename
done
sleep $step
done