在Linux中定时备份文件

来源:互联网 发布:最终幻想猫女捏脸数据 编辑:程序博客网 时间:2024/05/01 08:06

WAHT IS THIS

在这篇博客中,笔者介绍了怎么在Linux中备份文件,使用到的有crontab、tar和shell脚本相关知识。笔者最近在学习中会写一些demo程序,有时候一些误操作会让自己几个小时的成果丢失,例如对其他文件进行误操作,覆盖了其它重要文件,所以就写了几个脚本定时备份重要的文件,保护工作成果。

STEP 1

编写打包文件的脚本。脚本的目的是:将当前目录下重要的文件打包到tarfile.tar.gz中。重要文件需要在脚本中指定,或者给出重要文件的扩展名。以下是打包脚本tarfile.sh的内容:

#!/bin/bash#Author:kevin#Version:1.0#Create time:20161130#Description:TARGET="allfile.tar.gz"SRC="*.c *.sh *.py"if [ -f $TARGET ]then    rm $TARGET    echo "delete old file"  fitar -zcvf ./$TARGET ./$SRC >> nullif [ $? -eq 0 ]then    echo "create new tar file success !"else    echo "create tar file failed!"fiprintf "\a"exit 0

在shell脚本中,你可以修改TARGET的值来设定打包后生成的文件名,默认是tarfile.tar.gz,还可以修改SRC的值来设定需要打包的文件。这个脚本中SRC=”*.c *.sh *.py”,意思是,将所有以.c 和.sh以及.py结尾的文件都打包起来。这个脚本可以单独运行,也可以由下面会讲到的总控脚本调用执行。

STEP 2

编写总控脚本。有可能你有多个文件夹中的文件需要备份,但是每个文件夹中的重点文件都不同,所以可以在不同的文件夹中部署不同的tarfile.sh。总控脚本的作用就是一次执行tarfile.sh脚本,将不同文件夹中的重要文件分别打包。以下是总控脚本tarballfile.sh

#!/bin/bash#Author:kevin#Version:1.0#Create time:20161130#Description:MYPWD="/media/sf_test/"TARGET="tarfile.sh"LOGFILE='logtarfile.log'cd $PWDstring=`ls -l $PWD | awk '/^d/ {print $NF}' ` record=''for i in $stringdo     echo "---------------------"    cd $MYPWD'/'$i    echo $i    #cd $i    if [ -f $TARGET ]    then          echo "find file "          ./$TARGET    else        echo "can not find file"    fidone cd $MYPWDecho -e "[`date '+%Y%m%d-%H:%M'`] :creat backup file " >> $LOGFILEecho "create log file success"printf "\a"exit 0

其中可能根据自己的需要修改一下变量值:

  • MYPWD

MYPWD是你总控脚本放置的目录,总控脚本应该放置在所有需要打包的目录的上一级,例如:
总目录
这是总目录,总目录下有c语言学习、java学习、python学习的分目录,总控脚本就可以放置在总目录下;MYPWD就是总目录的路径。

  • TARGET

TARGET是STEP 1中的脚本的名称,默认是“tarfile.sh”

  • LOGFILE

LOGFILE是日志的名称,默认是“logtarfile.log”,可以根据需要修改。

试着执行以下总控脚本,可以看到如下执行结果:
执行总控脚本
从执行结果可以看出,在c_learning文件夹中放置了tarfile.sh脚本,它就会进行备份,在git_learning中没有放置脚本,它就不进行备份。

可以查看一下日志文件logtarfile.log:
这里写图片描述
可以看出,成功创建了备份文件。

STEP 3

接下来就是创建一个定时任务,定时执行总控脚本了。
-先安装crontab:yum install crontabs
-添加任务:crontab -e,进入后添加任务选项。
格式:f1 f2 f3 f4 f5 program
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行
当 f1 为 /n 时表示每 n 分钟个时间间隔执行一次,f2 为 /n 表示每 n 小时个时间间隔执行一次
当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行
例如10分钟定时备份一次就是这样写:

*/10 * * * * /media/sf_test/tarballfile.sh

-启动crontab

service crond start启动服务service crond stop关闭服务service crond restart重启服务

至此,定时任务添加完毕,再也不怕误操作文件丢失啦!

0 0
原创粉丝点击