首页 > 自动化运维 > Shell > shell 脚本之批量备份
2015
06-26

shell 脚本之批量备份

作为一个有职业操守的运维人员做好日常备份是十分必要的,一次次血的教训告诉我们:备份吧孩子!以下两个例子:

一、对于一个更新较慢的项目

#!/bin/bash
#day_archive

##定义变量##
Date=`date +%y%m%d`
Files=archive.$Date.tar.gz    #关联最后一行tar使用的参数,这里调用gzip
Config_file=/tmp/source_files  #文件内容根据需求自行生成
Destination=/tmp/$Files
##脚本##
if [ -f $Config_file ];then
       touch -c test      #什么也没做,这里的目的主要是为了验证文件是否存在.
else
        echo "$Config_file does not exist."
        exit
fi

File_no=1      #方便排查故障,可选 .

exec < $Config_file    #重定向标准输入
read Filename        #读取输入

while [ $? -eq 0 ]
do
  if [ -f $Filename -o -d $Filename ];then
        Filelist="$Filelist $Filename"   
  else
        echo "$Filename does not exist."
        echo "continuing to build archive list"
  fi
        File_no=$[$File_no + 1]   #可选
        read Filename     #读取下一个
done

tar -zcf $Destination $Filelist 2>/dev/null

二、对于文件变动频繁的项目

    因为小时进行备份将会产生大量的文件,所以按日期创建文档。

#!/bin/bash
#hour_archive

Day=`date +%d`
Month=`date +%m`
Time=`date +%H%M`
mkdir -p /tmp/$Month/$Day
Destination=/tmp/$Month/$Day/archive.$Time.tar.bz2 
Config_file=/tmp/source_files

#### as same as #####
if [ -f $Config_file ];then
   touch -c test          
else
        echo "$Config_file does not exist."
        echo "Backup to completed due to missing Configuration File"
        exit
fi       
          
File_no=1
exec < $Config_file 
read Filename 
             
while [ $? -eq 0 ]
do
  if [ -f $Filename -o -d $Filename ];then 
        Filelist="$Filelist $Filename"
  else
        echo "$Filename does not exist."
        echo "continuing to build archive list"
  fi
        File_no=$[$File_no + 1]
        read Filename     
done

tar -jcf $Destination $Filelist 2>/dev/null

               

注:配合cron使用方可达到效果,部分命令cron无法识别的改为绝对路径即可。

crontab详解   http://tshare365.com/archives/623.html




最后编辑:
作者:wood-man
这个作者貌似有点懒,什么都没有留下。
捐 赠您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击

留下一个回复