分页: 1 / 1

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

发表于 : 2007-12-11 22:05
zhyclt

代码: 全选

#!/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
原代码就是这样了,需要的可根据自己的需求进行更改~

发表于 : 2007-12-11 22:06
zhyclt
原创的 啊~~大家别光看不回帖啊~来好拍个砖都行啊·

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

发表于 : 2007-12-30 16:18
lyhic
不错!学习学习!

发表于 : 2008-01-14 23:49
xianyuhui
我是门外汉,请问这个备份全部所包含的路径,以及会进入备份死循环吗?
因为我只是想使用,不懂太多shell脚本,请楼主解释一下

发表于 : 2008-01-15 0:00
tongttt
来学习一下。

发表于 : 2008-04-30 12:20
zhuge000
有谁用过没有,怎么样啊?
只是面向管理员的么?
个人用户呢?
解释一下吧,菜鸟比较多,不是都能看懂的……