博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux自动备份脚本
阅读量:7043 次
发布时间:2019-06-28

本文共 2499 字,大约阅读时间需要 8 分钟。

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

题目:

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

解答:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[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`
 
if 
[ $new_sum_error == $old_sum_error -a $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

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

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

1
2
3
4
5
6
7
8
9
10
11
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列表文件中未变化和变化部分的条目值是否相同,来判断所要备份目录中的文件是否有发生变化,以此来决定是否删除前一天的备份。

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

本文转自 aaao 51CTO博客,原文链接:http://blog.51cto.com/nolinux/1541163,如需转载请自行联系原作者
你可能感兴趣的文章
敏捷开发般若敏捷系列之八:敏捷的未来会怎样?
查看>>
Java 编程
查看>>
我的友情链接
查看>>
mariadb常用备份与还原工具介绍
查看>>
F5服务器负载均衡测试方案
查看>>
深入内存
查看>>
python virtualenv 需要使用系统的第三方包。
查看>>
得到spring的上下文
查看>>
向电信联通开刀背后的真相
查看>>
VII Python(7)爬虫
查看>>
android Installation error: INSTALL_FAILED_CONTAINER_ERROR错误
查看>>
数据库安全管理
查看>>
java位运算
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
linux基本命令
查看>>
数据库中间件 Sharding-JDBC 源码分析 —— SQL 解析(二)之SQL解析
查看>>
部署SCVMM 2012R2
查看>>
python编程题-句子的逆序
查看>>
ISL和IEEE 802.1Q帧格式
查看>>