自动备份项目要求
- 具备配置文件
- 每天定时更新,并详细记录日志
- 对文件进行压缩
- 保留3天的备份数据
配置文件
- 包含需要备份的路径形式:path1:path2:path3
- 目标目录:打包到安全目录
#filename: .bash.rc
bashup_path=/home/x/code:/home/meng
dest_dir=/date
pre_name=
suffix_name=
日志
时间 操作 对象 在磁盘上的数据增加还是减少,多大
2018-8-16 12:10 backup /home/x/code --> ERROR 权限错误
2018-8-17 12:10 backup /home/x/code --> home_x_code_2018_8_17.tar.gz +32M
2018-8-17 12:11 delete home_x_code_2018_8_14.tar.gz --> remove -123M
自动备份项目的相关命令
command 新命令 旧命令
给旧命令起个外号
eg:command QQ wq
在vim下QQ也是保存
crontab -e
分 时 日 月 周 用户 参数设定值 参数设定值 指令段
eg:* * * * * bash 路径.sh文件
cut -d "" -f
-d
用来定义分隔符,默认为tab键
,-f
表示需要取得哪个字段
eg: echo "a/b/c" | cut -d '/' -f 1
执行结果是a
先按/
分段,第一个字段是a
,第二个字段是b
,第三个字段是c
,-f
就是取第几个字段,如果后面的是-f 1-
,就是取后一字段c
tar
打包 解压
打包:tar 参数 路径打包后名称 需要打包的名称
解压:tar 参数 路径打包后名称 -C 解压后的路径目录
https://www.cnblogs.com/yhjoker/p/7568680.html
tail -f
根据文件描述符进行追踪,当文件改名或被删除,追踪停止
tr [:] [\n]
替换
. source
.
和 source
作用一样
echo >>
日志只能追加 原则上不能删除
shell
#!/bin/bash
source ~/project_backup/.backup.rc # .backup.rc里定义了文件路径
TIME_NOW=`date +"%Y-%m-%d %H:%M"` # 现在的时间
TIME_FILE=`date +"%Y_%m_%d_%H_%M"` # 文件的时间
# dest_dir=~/project_backup/backup
# back_dir=$1
# log=~/project_backup/backup.log
if [[ ! -d $dest_dir ]]; then # 如果不是目录报错
echo "$TIME_NOW [ERROR] The Dest dir $dest_dir not exists" >> $log # 记录日志
exit
fi
echo "$TIME_NOW backup started!" >> $log # 开始进行打包并记录日志
for i in `echo $back_dir | tr ":" "\n"`; do # 遍历需要打包的文件
if [[ ! -d $i ]]; then # 如果不是目录报错
echo "%TIME_NOW backup [ERROR] The dir $i not exists" >> $log
fi
echo "$i started"
target=`echo $i | cut -d "/" -f 2- | tr "/" "_"` # 提取文件名
target=${target}_${TIME_FILE}.tar.gz # 进行压缩包命名
tar czPf "${dest_dir}/${target}" $i # 进行打包
if [[ $? -eq 0 ]]; then # 判断打包是否成功
for i in `du -h ${dest_dir}/${target}`; do # 记录压缩包占用空间大小
size=$i
break
done
echo -e "\033[47;34m $TIME_NOW backup $i --> $target +${size} \033[0m" >> $log
else
echo "$TIME_NOW [ERROR] Something ..." >> $log
fi
done
Del_list=`find $dest_dir -name "*.tar.gz" -mtime +3` # 找到三天前的压缩包
for i in $Del_list; do # 删除三天前的压缩包
for j in `du -h $i`; do
size=$j
break
done
echo -e "\033[47;34m $TIME_NOW delete $i --> remove -${size} \033[0m" >> $log
rm -f $i
done