linux 自动备份脚本
写作一个备份/etc目录的脚本,要求:将/etc目录下的所有文件cp到/var/backups目录下
的以当天的日期命名的目录中例如(/var/backups/etc.20140809)。
并且判断前一天的目录中的文件与当天的区别,如果无区别,则删除前一天的备份目录。
[root@nolinux scripts]# cat auto_bak.sh
#!/bin/bash
#
# This script is used to automatically backup the specified directory, and judgment, and whether the previous backup
# Written by sunsky
# Mail : 274546888@qq.com
# Date : 2014-8-16 23:00:00
#
bak_from_name="etc"
bak_from_dir="/etc"
bak_to_dir_par="/var/backups"
bak_dir="${bak_to_dir_par}${bak_from_dir}.$(date +%Y%m%d)"
yes_bak_dir="${bak_to_dir_par}${bak_from_dir}.$(date -d '-1 day' +%Y%m%d)"
new_sum_file="${bak_to_dir_par}/new_sum.$bak_from_name.$(date +%Y%m%d)"
old_sum_file="${bak_to_dir_par}/old_sum.$bak_from_name.md5"
if [ ! -d $bak_to_dir_par ];then
mkdir $bak_to_dir_par
fi
find $bak_from_dir |xargs -I {} md5sum {} >> $new_sum_file 2>/dev/null
cp -a $bak_from_dir $bak_dir && echo "$bak_from_dir directory to $bak_dir directory backup successfully"
new_sum_error=`md5sum -c $new_sum_file 2>/dev/null|awk '$2!~"OK"'|wc -l`
new_sum_ok=`md5sum -c $new_sum_file 2>/dev/null|awk '$2~"OK"'|wc -l`
old_sum_error=`md5sum -c $old_sum_file 2>/dev/null|awk '$2!~"OK"'|wc -l`
old_sum_ok=`md5sum -c $old_sum_file 2>/dev/null|awk '$2~"OK"'|wc -l`
##awk '$2 ~ "OK"' 中的 ~ 是awk的运算符,表示匹配 , !~ 表示不匹配
#if [ $new_sum_error == $old_sum_error -a $new_sum_ok == $old_sum_ok ];then
if [[ $new_sum_error == $old_sum_error && $new_sum_ok == $old_sum_ok ]];then
echo "Because today and yesterday's content is the same, delete the backup content of yesterday"
rm -rf $yes_bak_dir $new_sum_file
fi
echo | cp $new_sum_file $old_sum_file &>/dev/null
PS:
echo | cp $new_sum_file $old_sum_file &>/dev/null 发现这样是覆盖不了的,我机子的cp默认是 cp -i 了
[root@vagrant-centos64 ~]# which cp
alias cp='cp -i'
/bin/cp
所以写成cp的绝对路径就可以了
/bin/cp $new_sum_file $old_sum_file &>/dev/null,而且我也不知道"echo | "是干嘛的
针对以上脚本的简单描述:
本脚本将所有涉及到的目录都声明了变量,这样子就方便脚本功能的灵活收缩。无论是变更所要备份的目录项还是变更备份到的目录项都很另外。由于题目要求不采用打包的方式备份,因此本脚本不涉及对脚本的打包管理。
bak_from_name变量为所要备份的目录名
bak_from_dir变量为所要备份的目录路径
bak_to_dir_par变量为所要备份到的目录的父(上级)目录路径
bak_dir变量为所要备份到的目录路径
yes_bak_dir变量为所要备份目录前一天的备份目录路径
new_sum_file变量为当天所计算出来的所要备份目录的MD5列表
old_sum_file变量为当天所计算出来的所要备份目录的MD5列表(此变量的当天是脚本执行之后的当前,在脚本才开始执行的时候,该变量所指定的文件为前一天备份目录的MD5列表)
new_sum_error变量为当天所要备份目录的MD5发生变化的条目总数
new_sum_ok变量为当天所要备份目录的MD5未发生变化的条目总数
old_sum_error变量为前一天所要备份目录的MD5发生变化的条目总数
old_sum_ok变量为前一天所要备份目录的MD5未发生变化的条目总数
该脚本前一段主要是搜寻所要备份目录的每一个文件的md5值,然后记录到当天的所要备份目录的MD5列表文件中,然后执行备份。
该脚本后一段(执行备份之后的部分)主要是根据比对当天的所要备份目录的MD5列表文件和前一天的所要备份目录的MD5列表文件中未变化和变化部分的条目值是否相同,来判断所要备份目录中的文件是否有发生变化,以此来决定是否删除前一天的备份。
转载于:https://blog.51cto.com/iter2012/1611486
linux 自动备份脚本相关推荐
- Linux自动备份脚本
今天网上一个朋友问了我一个shell的题目,让我帮他做下.下面是题目以及解题思路. 题目: 写作一个备份/etc目录的脚本,要求:将/etc目录下的所有文件cp到/var/backups目录下的以当天 ...
- sqlserver在linux数据备份,SQLServer数据库之sqlserver for linux自动备份数据库脚本
本文主要向大家介绍了SQLServer数据库之sqlserver for linux自动备份数据库脚本,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. 不多说直接上脚本 # ...
- Linux自动备份MySQL数据库脚本代码
Linux自动备份MySQL数据库脚本代码 下面这段Linux的Shell脚本用于每日自动备份MySQL数据库,可通过Linux的crontab每天定时执行 在脚本中可设置需要备份的数据库表清单,并且 ...
- linux自动备份db2数据库备份,db2 自动备份(linux 、windows)总结
1.linux db2 自动备份,备份后压缩,拷贝到另一服务器 全备份: #!/bin/sh #------------------------------------- #db2自动备份脚本 #by ...
- Mysql自动备份脚本
1.Mysql自动备份脚本 #!/bin/sh # 数据库基本信息 #数据库名称 DB_NAME="test" #用户名 DB_USER="root" #密码 ...
- oracle备份数据脚本,oracle数据库自动备份脚本
::通过exp命令导出远程机器(192.168.2.1)上指定服务(orcl)指定用户(pmis)及密码(pmis)的数据 ::运行该脚本的机器必须安装oracle @echo off @echo [ ...
- 数据库自动备份脚本使用
数据库自动备份脚本使用 备份 Linux 请先在测试环境进行测试 编写备份脚本 根据情况调整以下内容中的参数,并保存为backup.sh并放置在数据库所在服务器上(位置无限制) echo '##### ...
- windows下oracle数据库自动备份脚本
1.根据日期自动生成 Oracle 备份文件 @echo off echo 正在备份Oracle数据库,请稍等...... exp userid='用户名/密码@SID' file=D:\bak\re ...
- python自动备份数据库_Python Mysql自动备份脚本
测试系统环境 Windows 2003 python 2.5.1 mysql 5.0.1 应该只适用于Win,因为调用了CMD. 增量备份,因为自用,数据库不大. 回头有了需求加上自检测,5天 ...
最新文章
- 【习题3】数字和数学计算【第4天】
- 基本CSS选择器,复合选择器,后代选择器
- Activity学习(一):生命周期
- 将下图的nfa确定化为dfa_作业8 非确定的自动机NFA确定化为DFA
- java动态创建bean的意义_java相关:Spring Boot如何动态创建Bean示例代码
- JavaScript实现euclideanDistance欧氏距离算法(附完整源码)
- zeros什么意思_ma=zeros(n);是什么意思'
- JVM初学之类java的类加载器和双亲委派模型
- 怎么搜索php文件内容,linux怎么搜索文件
- hive动态分区shell_Hive/Shell 创建Hive 库 ,表脚本,Hive 动态增加分区脚本
- Web API-BOM- 操作浏览器
- Java---设计【高校教师信息管理系统】
- ubuntu18.04 卸载Anaconda3
- 基于rk3288的驱动编译
- 【3C认证】儿童安全座椅3C认证本年9月1日起实施
- MySQL用户IP授权
- 想问题思路总是不清晰,这个好用的脑图工具推荐给你
- 我开发过程中遇到的Echarts地图立体描边问题解决方式
- API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等] item_get - 根据ID取商品详情
- UG后处理—进给速度R模式输出研究
热门文章
- python下载安装教程3.8.1-Linux安装Python 3.8.1
- windows在命令行中查看当前路径
- 解决opencv错误AttributeError: module ‘cv2.cv2‘ has no attribute ‘xfeatures2d‘
- 题目1160:放苹果
- Spring MVC 拦截器 interceptor 详解
- 2017-11-29 黑盒测试实践(小组作业)小组工作记录
- Goldengate 应用环境 mysql to oracle
- WinForm中异步加载数据并使用进度条
- js对象,原型,call,apply浅析
- jquery 使用animate来改变高度自动添加样式overflow:hidden的问题