linux备份脚本之遍历目录下所有二级目录并备份

llinux备份脚本之遍历目录下所有二级目录并备份

1,备份脚本如下,我这里以备份CVS目录为例,总CVS目录下有几个Project,统统备份

并且保留20份原始文档,恢复也很简单,拷贝回去接压缩即可,特别是权限等也不受到影响,

另外还有日志文件全程跟踪,你可以了解备份的具体时间,和期间遇到的问题。

#!/bin/bash

#author:        JerryMin

#date:          2013-03-08

#role:          backup files periodically.

##################################################

LogFile=/root/cvsbakup/log/`date +"%Y-%m-%d"`.log

SourceDir=/cvs

BakDir=/cvsbak

RetainDay=20

ProjectLst=/root/cvsbakup/project.lst #ProjectLst是你要备份的二级目录,选择需要备份的,每行填一个即可

##################################################

DATE=`date +"%Y-%m-%d"`

echo "backup start at $(date +"%Y-%m-%d %H:%M:%S")" >$LogFile

echo "--------------------------------------------------" >>$LogFile

cd $BakDir

PROJECTLIST=`cat $ProjectLst`

for Project in $PROJECTLIST

do

 ProjectData=$SourceDir/$Project

 DestDir=$BakDir/$Project

 PackFile=$DATE.$Project.tgz

 if [ -f $BakDir/$PackFile ]

 then

  echo "--------------------------------------------------" >>$LogFile

  echo " backup file have exist !" >>$LogFile

  echo "--------------------------------------------------" >>$LogFile

 else

  echo "`date +"%Y-%m-%d %H:%M:%S"` cp log begin !" >>$LogFile

  echo "--------------------------------------------------" >>$LogFile

  cp -a $ProjectData $DestDir  >>$LogFile 2>&1  

  echo "--------------------------------------------------" >>$LogFile

  echo "`date +"%Y-%m-%d %H:%M:%S"` tar log begin !" >>$LogFile

  echo "--------------------------------------------------" >>$LogFile

  tar -zcvf $PackFile $Project  >>$LogFile 2>&1

  echo "--------------------------------------------------" >>$LogFile

  echo "`date +"%Y-%m-%d %H:%M:%S"` backup $Project done into $PackFile" >>$LogFile

  echo "--------------------------------------------------" >>$LogFile

  echo "`date +"%Y-%m-%d %H:%M:%S"` begin delete project" >>$LogFile

  rm -rf $Project

 fi

done

echo "--------------------------------------------------" >>$LogFile

echo "`date +"%Y-%m-%d %H:%M:%S"` find file retainday over 20 days" >>$LogFile

find $Bakdir -type f -mtime +$RetainDay -name "*.$Project.tgz" -exec rm {} \;  >/dev/null 2>&1  #删除20天之前的文档,如果你用的是天天备份

echo "--------------------------------------------------" >>$LogFile

echo "backup end at $(date +"%Y-%m-%d %H:%M:%S")" >>$LogFile

exit 0

2,上面这个脚本是本地备份,如果想异地备份

我这里也有几个办法,一个是NFS,另一个是SAMBA,还有一个是FTP,想NFS,SAMBA只需要挂载过来

即可,比如我们这里的/cvsbak,可是是挂载网络上的NFS,SAMBA目录,只要权限设置妥当,完全没有问题。

最后FTP,其实用smbclient访问时跟FTP差不多,在脚本的最后加上,登录的用户名密码再PUT上去即可,比如FTP的脚本如下:

前面设置Server,User,Passwd

ftp -i -in<<!

open $Server 

user $User $Passwd

lcd $BakDir

mput *.tar.gz

bye

3,温馨提示

如果是linux系统之间,最后用NFS做共享,例如本例中CVS文件本身就有很多权限,如果用samba挂载,文件的权限cp不过去,之后恢复起来还要重新设置权限,比较麻烦。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Netkiller

Linux 系统安全与优化配置

Linux 系统安全与优化配置 目录 1. Openssh 安全配置 1.1. 禁止root用户登录 1.2. 限制SSH验证重试次数 1.3. 禁止证书登陆 ...

3675
来自专栏刘远飞的专栏

CentOS6.5系统yum安装LAMP环境

采用Linux下二进制模式来安装LAMP,适合初学者,测试使用。

7810
来自专栏散尽浮华

Iptables之recent模块小结

Iptables的recent模块用于限制一段时间内的连接数, 是谨防大量请求攻击的必杀绝技! 善加利用该模块可充分保证服务器安全。

2163
来自专栏静下来

linux防火墙执行清除命令iptables -F说明

如果服务器涉及到一些端口开放,特别是要自动连接无限制端口,那么我们就得清除Linux的防火墙。 但是绝大多数的Linux服务器,默认的防火墙是有OUTPUT策略...

47010
来自专栏运维

linux下自动备份脚本并上传到ftp服务器

#!/bin/bash #设置日志文件,前提建好了/backup/log目录 LogFile=/backup/log/`date +"%Y-%m"`.log...

2303
来自专栏Keegan小钢

App环境分离的实现:iOS篇

说到App环境分离在iOS的实现,我曾在iOS技术群里问过:如何实现在同一台手机能同时安装同个应用的测试和生产版本?应用名称要有区分,图标也要有所区别。不要手动...

1283
来自专栏JadePeng的技术博客

K8S集群安装

主要参考 https://github.com/opsnull/follow-me-install-kubernetes-cluster

6012
来自专栏魏艾斯博客www.vpsss.net

iptables 报错:iptables-restore: unable to initialize table ‘filter 的解决办法

8813
来自专栏散尽浮华

Linux服务器安全登录设置记录

在日常运维工作中,对加固服务器的安全设置是一个机器重要的环境。比较推荐的做法是: 1)严格限制ssh登陆(参考:Linux系统下的ssh使用(依据个人经验总结)...

29410
来自专栏追不上乌龟的兔子

[译]使用iptables控制网络流量

iptables是一个允许用户配置特定规则的应用程序,这些规则由将由内核netfilter框架强制执行。它充当数据包过滤器和防火墙,可根据端口,协议和其他标准检...

1K3

扫码关注云+社区

领取腾讯云代金券