Linux自动备份脚本

今天网上一个朋友问了我一个shell的题目,让我帮他做下。下面是题目以及解题思路。

题目:

写作一个备份/etc目录的脚本,要求:将/etc目录下的所有文件cp到/var/backups目录下的以当天的日期命名的目录中例如(/var/backups/etc.20140809)。并且判断前一天的目录中的文件与当天的区别,如果无区别,则删除前一天的备份目录。

解答:

1[root@nolinux scripts]# cat auto_bak.sh  2#!/bin/bash 3# 4# This script is used to automatically backup the specified directory, and judgment, and whether the previous backup  5# Written by sunsky 6# Mail : 274546888@qq.com 7Date : 2014-8-16 23:00:00 8# 9bak_from_name="etc" 10bak_from_dir="/etc" 11bak_to_dir_par="/var/backups" 12bak_dir="${bak_to_dir_par}${bak_from_dir}.$(date +%Y%m%d)" 13yes_bak_dir="${bak_to_dir_par}${bak_from_dir}.$(date -d '-1 day' +%Y%m%d)" 14new_sum_file="${bak_to_dir_par}/new_sum.$bak_from_name.$(date +%Y%m%d)" 15old_sum_file="${bak_to_dir_par}/old_sum.$bak_from_name.md5" 16 17if [ ! -d $bak_to_dir_par ];then 18  mkdir $bak_to_dir_par 19fi 20find $bak_from_dir |xargs -I {} md5sum {} >> $new_sum_file 2>/dev/null 21cp -a $bak_from_dir $bak_dir && echo "$bak_from_dir directory to $bak_dir directory backup successfully" 22 23new_sum_error=`md5sum -c $new_sum_file 2>/dev/null|awk '$2!~"OK"'|wc -l` 24new_sum_ok=`md5sum -c $new_sum_file 2>/dev/null|awk '$2~"OK"'|wc -l` 25old_sum_error=`md5sum -c $old_sum_file 2>/dev/null|awk '$2!~"OK"'|wc -l` 26old_sum_ok=`md5sum -c $old_sum_file 2>/dev/null|awk '$2~"OK"'|wc -l` 27 28if [ $new_sum_error == $old_sum_error -a $new_sum_ok == $old_sum_ok ];then 29  echo "Because today and yesterday's content is the same, delete the backup content of yesterday" 30  rm -rf $yes_bak_dir $new_sum_file 31fi 32echo | cp $new_sum_file $old_sum_file &>/dev/null

针对以上脚本的简单描述:

本脚本将所有涉及到的目录都声明了变量,这样子就方便脚本功能的灵活收缩。无论是变更所要备份的目录项还是变更备份到的目录项都很另外。由于题目要求不采用打包的方式备份,因此本脚本不涉及对脚本的打包管理。

1bak_from_name变量为所要备份的目录名 2bak_from_dir变量为所要备份的目录路径 3bak_to_dir_par变量为所要备份到的目录的父(上级)目录路径 4bak_dir变量为所要备份到的目录路径 5yes_bak_dir变量为所要备份目录前一天的备份目录路径 6new_sum_file变量为当天所计算出来的所要备份目录的MD5列表 7old_sum_file变量为当天所计算出来的所要备份目录的MD5列表(此变量的当天是脚本执行之后的当前,在脚本才开始执行的时候,该变量所指定的文件为前一天备份目录的MD5列表) 8new_sum_error变量为当天所要备份目录的MD5发生变化的条目总数 9new_sum_ok变量为当天所要备份目录的MD5未发生变化的条目总数 10old_sum_error变量为前一天所要备份目录的MD5发生变化的条目总数 11old_sum_ok变量为前一天所要备份目录的MD5未发生变化的条目总数

该脚本前一段主要是搜寻所要备份目录的每一个文件的md5值,然后记录到当天的所要备份目录的MD5列表文件中,然后执行备份。

该脚本后一段(执行备份之后的部分)主要是根据比对当天的所要备份目录的MD5列表文件和前一天的所要备份目录的MD5列表文件中未变化和变化部分的条目值是否相同,来判断所要备份目录中的文件是否有发生变化,以此来决定是否删除前一天的备份。

OK!本文到此结束,希望能对51博友有所帮助!

本文出自 “Not Only Linux” 博客,请务必保留此出处http://nolinux.blog.51cto.com/4824967/1541163

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )