注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

拥有自己的梦想,跟随心的召唤

平凡是福

 
 
 

日志

 
 

Ubuntu 系统文件增量备份脚本  

2013-04-12 20:00:23|  分类: Ubuntu |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
对指定的目录进行文件扫描,仅备份指定时间内有更新的文件,如备份24h前修改或新增的文件。
使用方式:$ ./backup.sh [天数] [源路径] [目标路径]
参数均为可选,默认备份1天前更新或新建的文件。
#!/usr/bin/env bash
echo "start: $(date '+%Y-%m-%d %H:%M:%S')" # 备份的天数:默认为1天 if [ -z $1 ] then day=1 else day=$1 fi # 备份的源路经 if [ -z $2 ] then fromdir=/bcfile/bcdata else fromdir=$2 fi # 备份到的目录 if [ -z $3 ] then todir=/bcbak2/$(date +%Y%m%d)/bcdata else todir=$3 fi echo "day=$day" echo "fromdir=$fromdir" echo "todir=$todir" # 如果源路径不存在就退出不处理 if [ ! -d $fromdir ] then echo "source dir do not exist, ignore and exit." exit 0 fi # 如果目标路径已经存在也退出不处理 if [ -d $todir ] then echo "target dir exists, ignore and exit." exit 0 else mkdir -p $todir fi # 当前时间与n天前的时间 ct=$(date +%s) bt=$[$ct-$day*86400] echo "bt=$bt,ct=$ct,$(date -d last-day +%s)" # 递归处理目录 function iterateDir(){ #echo "dir: $1" for f in $1/* do if [ -d $f ] then iterateDir $f else if [ -f $f ] then dealFile $f fi fi done } # 处理文件:备份 function dealFile(){ src=$1 # 文件名 name=${src##*/} # 备份到的路径 dir=${src/$fromdir/$todir} dir=${dir%/*} #echo "from file: $src" #echo "to file: ${dir}/$name" # 仅复制新文件 ft=`stat -c "%Y" $1` if [ "$ft" -ge "$bt" ] then echo "cp $src $dir" mkdir -p $dir cp $src $dir fi } # 方法调用入口 iterateDir $fromdir exit 0

定时任务相关操作命令:
复制文件时保留文件的时间戳:cp -a
编辑当前用户的定时任务配置:crontab -e
列出当前用户的crontab文件的内容:crontab -l
删除当前用户的crontab文件:crontab -r
重启crontab服务:sudo service cron restart (crontab文件修改之后需执行这个命令重启cron方有效)
查看cron运行状态:service cron status
选定编辑器:select-editor  
事实证明,至少在ubuntu12.04中,cron里面绝对路径是不需要的,默认会在 home 下执行,并且会读取当前用户的profile。

其他参考脚本:
获取当前时间并格式化:$ date '+%Y-%m-%d %H:%M:%S'  或 $(date '+%Y-%m-%d %H:%M:%S') 例:2013-04-12 13:59:34
当前时间与1970-01-01 00:00:00之间的秒数:$ date +%s
获取文件的最后修改时间:stat -c "%X" $file
获取目录的上级目录:parentDir=${fromDir%/*}
获取文件名称:name=${filePath##*/}
给sh文件添加可执行权限:chmod +x 【文件】

参考:
Linux之Ubuntu中任务计划cron学习

基本的bash脚本语法:
1)if/else
if condition 
then 
   statements 
[elif condition 
   then statements. ..] 
[else 
   statements ] 
fi
if condition ; then 
   statements 
[elif condition ; then
statements... ] 
[else 
   statements ] 
fi
2)与或条件
  if [[ $a -le $b && $a -eq $b ]]; then 
  评论这张
 
阅读(1098)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017