(实用)一个交互式备份、恢复目录的脚本,管理员可参考·

sh/bash/dash/ksh/zsh等Shell脚本
回复
zhyclt
帖子: 12
注册时间: 2007-10-23 19:45

(实用)一个交互式备份、恢复目录的脚本,管理员可参考·

#1

帖子 zhyclt » 2007-12-11 22:05

代码: 全选

#!/bin/bash
#备份文件的一个脚本,按1、2、3自动进行备份
#可实现全部备份,只备份修改过或增加过的文件
#可以实现有选择的恢复
#如果大家能用的着,只要修改一下里面相关的参数就可以了
echo "####################################################"
echo "#           press 1 to bakup all file              #"
echo "#                                                  #"
echo "#           press 2 to bakup change file           #"
echo "#                                                  #"
echo "#           press 3 to recovery all file           #"
echo "#                                                  #"
echo "####################################################"
echo "press key1 key2 or key3:"
read key
#检查输入的是不是 数字1 、2或者3;不是的话就要重新输入
until [ $key -eq 1 ] || [ $key -eq 2 ] || [ $key -eq 3 ];do
	echo "press key1 key2 or key3! "
	read key_ag
	key=$key_ag
done
#定义脚本退出状态变量 
WORNG_INPUT=5
WORNG_DIR=4
#定义全部备份的函数
bakall () 
{	
#检查所要备份的目录是否是一个目录	
	if [ ! -d /home/$USER ];then
		echo "/home/$USER is not a dir or donot exsit"
		exit $WORNG_DIR
	fi
#如果存放备份文件的目录里没有以今天为日期的tarball,就进行备份,否则退出。
	if [ ! -e /home/tmp`date +%m-%d`.tar ];then
		echo "This is first to bakup /home/$USER!"
		tar -cvf /home/tmp`date +%m-%d`.tar /home/$USER
	else	
		echo "today alreaday bakup all file!"
	fi
#在/tmp目录下生成临时文件,这个文件的修改日期就是下次进行增量备份时所查找文件的日期。
[ -e /tmp/time ] || touch /tmp/time
echo "`date +%m-%d`" >/tmp/time
exit 0
}

#定义增量备份函数
bakupdate ()
{
#检查所要备份的目录是否是一个目录
	if [ ! -d /home/$USER ];then
		echo "/home/$USER is not a dir or donot exist"
		exit $WORNG_DIR
	fi
#检查存放备份文件的目录,如果有今天为日期的增量备份文件就打印消息,函数结束。
	if [ -e /home/tmp`date +%m-%d`update.tar ];then
		echo "today alreaday bakupdate!"
	else
		if [ ! -e /home/tmp*.tar ];then #如果存放备份文件的目录没有任何tarball,调用全部备份的函数
			echo "This is first time to bakupdate!"
			bakall
		else                            #备份原目录里有更新的文件
			echo "progrem will bakup changed file"
			find /home/$USER -newer /tmp/time -exec tar -cvf /home/tmp`date +%m-%d`update.tar {} \;
			echo "`date +%m-%d`" > /tmp/time
		fi
	fi

exit 0
}
#定义恢复函数,这个函数我就不说明了吧·~很简单 自己看了
forward ()
{
	ls -lh /home | grep ".*tar$" 
	echo "slect which tarball will recover"
	echo 'input file name as this sample : tmp???update.tar'
	read TARBALL
	until [ -e /home/$TARBALL ];do
		echo "input file is not exsit! please input again:"
		read TARBALL_ag
		TARBALL=$TARBALL_ag
	done
	tar -xvf /home/$TARBALL -C /home
	echo " recover done!"
		 
exit 0

}
#执行case语句,根据所选的选项调用不同的函数
case "$key" in

	1) bakall
	;;
	2) bakupdate
	;;
	3) forward
	;;
	*) exit $WORNG_INPUT  
	;;

esac
原代码就是这样了,需要的可根据自己的需求进行更改~
zhyclt
帖子: 12
注册时间: 2007-10-23 19:45

#2

帖子 zhyclt » 2007-12-11 22:06

原创的 啊~~大家别光看不回帖啊~来好拍个砖都行啊·
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

#3

帖子 xiooli » 2007-12-29 19:48

很好,很强大,说些外行话,lz echo出来的有些英语似乎有语法错误呢,另外,使用一下压缩应该会更好些吧。不知道更新备份直接用 tar -uvf [file.tar] [file]行不行呢?
我是个外行,只能挑些鸡毛蒜皮的问题了,见笑了。 :em08
Joolix live OS: http://joolix.com

代码: 全选

dpkg -l|awk '/^rc/{print $2}'|sudo xargs dpkg -P
lyhic
帖子: 112
注册时间: 2007-06-29 20:19

#4

帖子 lyhic » 2007-12-30 16:18

不错!学习学习!
xianyuhui
帖子: 75
注册时间: 2007-11-12 20:41

#5

帖子 xianyuhui » 2008-01-14 23:49

我是门外汉,请问这个备份全部所包含的路径,以及会进入备份死循环吗?
因为我只是想使用,不懂太多shell脚本,请楼主解释一下
tongttt
帖子: 444
注册时间: 2007-11-27 22:20

#6

帖子 tongttt » 2008-01-15 0:00

来学习一下。
zhuge000
帖子: 101
注册时间: 2008-04-18 17:06

#7

帖子 zhuge000 » 2008-04-30 12:20

有谁用过没有,怎么样啊?
只是面向管理员的么?
个人用户呢?
解释一下吧,菜鸟比较多,不是都能看懂的……
回复