写作一个备份/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 自动备份脚本相关推荐

  1. Linux自动备份脚本

    今天网上一个朋友问了我一个shell的题目,让我帮他做下.下面是题目以及解题思路. 题目: 写作一个备份/etc目录的脚本,要求:将/etc目录下的所有文件cp到/var/backups目录下的以当天 ...

  2. sqlserver在linux数据备份,SQLServer数据库之sqlserver for linux自动备份数据库脚本

    本文主要向大家介绍了SQLServer数据库之sqlserver for linux自动备份数据库脚本,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. 不多说直接上脚本 # ...

  3. Linux自动备份MySQL数据库脚本代码

    Linux自动备份MySQL数据库脚本代码 下面这段Linux的Shell脚本用于每日自动备份MySQL数据库,可通过Linux的crontab每天定时执行 在脚本中可设置需要备份的数据库表清单,并且 ...

  4. linux自动备份db2数据库备份,db2 自动备份(linux 、windows)总结

    1.linux db2 自动备份,备份后压缩,拷贝到另一服务器 全备份: #!/bin/sh #------------------------------------- #db2自动备份脚本 #by ...

  5. Mysql自动备份脚本

    1.Mysql自动备份脚本 #!/bin/sh # 数据库基本信息 #数据库名称 DB_NAME="test" #用户名 DB_USER="root" #密码 ...

  6. oracle备份数据脚本,oracle数据库自动备份脚本

    ::通过exp命令导出远程机器(192.168.2.1)上指定服务(orcl)指定用户(pmis)及密码(pmis)的数据 ::运行该脚本的机器必须安装oracle @echo off @echo [ ...

  7. 数据库自动备份脚本使用

    数据库自动备份脚本使用 备份 Linux 请先在测试环境进行测试 编写备份脚本 根据情况调整以下内容中的参数,并保存为backup.sh并放置在数据库所在服务器上(位置无限制) echo '##### ...

  8. windows下oracle数据库自动备份脚本

    1.根据日期自动生成 Oracle 备份文件 @echo off echo 正在备份Oracle数据库,请稍等...... exp userid='用户名/密码@SID' file=D:\bak\re ...

  9. python自动备份数据库_Python Mysql自动备份脚本

    测试系统环境  Windows 2003   python 2.5.1  mysql 5.0.1 应该只适用于Win,因为调用了CMD. 增量备份,因为自用,数据库不大. 回头有了需求加上自检测,5天 ...

最新文章

  1. 【习题3】数字和数学计算【第4天】
  2. 基本CSS选择器,复合选择器,后代选择器
  3. Activity学习(一):生命周期
  4. 将下图的nfa确定化为dfa_作业8 非确定的自动机NFA确定化为DFA
  5. java动态创建bean的意义_java相关:Spring Boot如何动态创建Bean示例代码
  6. JavaScript实现euclideanDistance欧氏距离算法(附完整源码)
  7. zeros什么意思_ma=zeros(n);是什么意思'
  8. JVM初学之类java的类加载器和双亲委派模型
  9. 怎么搜索php文件内容,linux怎么搜索文件
  10. hive动态分区shell_Hive/Shell 创建Hive 库 ,表脚本,Hive 动态增加分区脚本
  11. Web API-BOM- 操作浏览器
  12. Java---设计【高校教师信息管理系统】
  13. ubuntu18.04 卸载Anaconda3
  14. 基于rk3288的驱动编译
  15. 【3C认证】儿童安全座椅3C认证本年9月1日起实施
  16. MySQL用户IP授权
  17. 想问题思路总是不清晰,这个好用的脑图工具推荐给你
  18. 我开发过程中遇到的Echarts地图立体描边问题解决方式
  19. API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等] item_get - 根据ID取商品详情
  20. UG后处理—进给速度R模式输出研究

热门文章

  1. python下载安装教程3.8.1-Linux安装Python 3.8.1
  2. windows在命令行中查看当前路径
  3. 解决opencv错误AttributeError: module ‘cv2.cv2‘ has no attribute ‘xfeatures2d‘
  4. 题目1160:放苹果
  5. Spring MVC 拦截器 interceptor 详解
  6. 2017-11-29 黑盒测试实践(小组作业)小组工作记录
  7. Goldengate 应用环境 mysql to oracle
  8. WinForm中异步加载数据并使用进度条
  9. js对象,原型,call,apply浅析
  10. jquery 使用animate来改变高度自动添加样式overflow:hidden的问题