分享最近写的一段Shell脚本,用来实现按发布包的文件目录结构备份生产线文件,以及回滚操作。

  1 #!/bin/sh
  2 path="/home/www/site1"
  3 pub=$path"/release/pub/MBOXII/trunk" #发布目录
  4 bak=$path"/release/bak" #生产目录备份文件
  5 prod=$path #生产目录
  6 pub_file_plus=$path"/release/pub_plus.txt" #增量文件:发布包相对生产包的新增文件列表日志
  7
  8 #执行备份
  9 dobak(){
 10     #删除之前的备份文件(夹)
 11     for file in $(ls $bak)
 12     do
 13         #echo $bak"/"$file
 14         rm -rf $bak"/"$file
 15     done
 16     if [ -f $pub_file_plus ]
 17     then
 18         rm -rf $pub_file_plus
 19     fi
 20     #将发布目录对应的生产目录的文件(夹)按原结构备份
 21     function read_dir(){
 22         for file in `ls $1`
 23         do
 24             dir_r=$1"/"$file
 25             dir_p=${dir_r/#$pub/$prod}
 26             dir_b=${dir_r/#$pub/$bak}
 27             if [ -d $dir_r ]  #注意此处之间一定要加上空格,否则会报错
 28             then
 29                 if [ -d $dir_p ]
 30                 then
 31                     #echo $dir_b
 32                     mkdir -p -m 755 $dir_b #创建对应的备份文件夹
 33                     read_dir $1"/"$file #递归子目录
 34                 else
 35                     echo $dir_p &>>$pub_file_plus
 36                 fi
 37             else
 38                 if [ -f $dir_p ]
 39                 then
 40                     #echo $dir_p" "$dir_b
 41                     cp $dir_p $dir_b
 42                 else
 43                     echo $dir_p &>>$pub_file_plus
 44                 fi
 45             fi
 46         done
 47     }
 48     read_dir $pub
 49     echo '备份完成'
 50 }
 51
 52 #执行发布
 53 dopub(){
 54     cp -arf $pub/* $prod
 55     echo '发布完成'
 56 }
 57
 58 #执行回滚
 59 dorollback(){
 60     for file in $(cat $pub_file_plus)
 61     do
 62         #echo $bak"/"$file
 63         rm -rf $file
 64     done
 65     cp -arf $bak/* $prod
 66     echo '回滚完成'
 67 }
 68
 69 usage() {
 70     cat <<EOF
 71         产品发布脚本使用方法:
 72         1       备份
 73         2       发布
 74         3       回滚
 75         4       退出
 76 EOF
 77 }
 78
 79 usage
 80 echo '请输入操作指令:'
 81 read cmd
 82 while [ $cmd != 'exit' ]
 83 do
 84     case $cmd in
 85         1)
 86             dobak
 87             ;;
 88         2)
 89             dopub
 90             ;;
 91         3)
 92             dorollback
 93             ;;
 94         4)
 95             #exit
 96             break
 97             ;;
 98         *)
 99             usage
100             ;;
101     esac
102     echo '请输入操作指令:'
103     read cmd
104 done

转载于:https://www.cnblogs.com/guizitc110/p/9335501.html

Shell脚本实现按目录备份、发布、回滚相关推荐

  1. 我的shell脚本实战-编写一个系统发布脚本

    平常我们会使用Jenkins发布系统,Jenkins可以从代码更新,编译到发布这样的一条龙服务.操作成本很低,作为程序员,肯定不满足于简单的界面操作. 于是我决定使用shell写一个自动发布的脚本,既 ...

  2. shell脚本 -d 是目录文件,那么-e,-f分别是什么?还有! -e这又是什么意思呢?

    shell脚本 -d 是目录文件,那么-e,-f分别是什么?还有"! -e"这又是什么意思呢? -e filename 如果 filename存在,则为真 -d filename ...

  3. 执行shell脚本进入指定目录

    在linux环境下,常有通过shell脚本进入指定目录的操作,例如有一段脚本chdir.sh: [plain]  view plain copy #!/bin/sh cd /home/user/Dow ...

  4. shell脚本进入指定目录

    在linux环境下,常有通过shell脚本进入指定目录的操作,例如有一段脚本 framework.sh #!/bin/bash echo "\n----------- 开始进入指定文件夹 - ...

  5. 【Shell】执行shell脚本进入指定目录

    在linux环境下,常有通过shell脚本进入指定目录的操作,例如有一段脚本chdir.sh: #!/bin/sh cd /home/jiulong/mstar/TVOS_Release_V1.0.6 ...

  6. Liunx下的日志清理shell脚本实战之日志备份

    Liunx下的日志清理shell脚本实战 一.脚本实现功能以及要求 二.shell脚本内容 一.脚本实现功能以及要求 二.shell脚本内容 一.脚本实现功能以及要求 1.日志备份目录,将日志备份到/ ...

  7. linux新建备份数据库的脚本文件,Linux下shell脚本:自动每日备份网站文件和数据库上传FTP空间...

    前言 服务器.vps,难免会遇到各种问题,丢失数据,则必然痛心疾首啊!!! 数据无价,so建议养成定期备份的习惯!而且,要多备份几份,本地.网盘.FTP空间等,都多保存几份! 这里,就为大家带来一个l ...

  8. Shell脚本:Linux下定时备份MySQL数据库

    对任何一个已经上线的网站站点来说,数据备份都是必须的.无论版本更新还是服务器迁移,备份数据的重要性不言而喻.人工备份数据的方式不单耗费大量时间和精力,还灰常不专业的说.于是,有了下面这段脚本的出现.参 ...

  9. linux mysql清除缓存_案例:通过shell脚本实现mysql数据备份与清理

    导读 Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行,实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核,不仅如此 ...

最新文章

  1. eclipse for C/C++
  2. 谷歌发表“移动AR设计的最佳做法”
  3. 【CV】54篇最新CV领域综述论文速递!涵盖14个方向:目标检测/图像分割/医学影像/人脸识别等方向...
  4. xmpp协议框架包介绍:org.xmpp.packet.Packet+JID+PacketInterceptor+Session
  5. Ubuntu中MySQL的启动/关闭/重启
  6. linux按照更改时间查看文件,Linux查看特定时间段内修改过的文件
  7. Android IOS WebRTC 音视频开发总结(四一)-- QQ和webrtc打洞能力pk
  8. JavaScript.Remove
  9. uinttest 异步多线程生成测试报告
  10. 用css+jquery实现视频永远占满全屏效果
  11. GIS空间分析 栅格数据分析2 成本距离分析
  12. 微信小程序 -- 语音合成:将文字转为语音(插件:微信同声传译)
  13. python 自动化微信小程序_干货 | 微信小程序自动化测试最佳实践(附 Python 源码)...
  14. MySQL read_only 与 super_read_only 之间的关系
  15. 华容道 java_Java-华容道
  16. 二手房买卖必须弄懂的七件事
  17. Java/Kotlin 最多保留两位小数处理方法
  18. 基于V4L2的视频驱动开发
  19. SYN, FIN, ACK, PSH, RST, URG
  20. 微软人工智能-深度学习框架和工具.md

热门文章

  1. ZYNQ基础系列(四) DMA基本用法
  2. 灵动微单片机MM32F0140的Mini-LED应用
  3. phpstudy配置域名
  4. 将任何普通图片转换为单色图
  5. 局域网路由器设置图解
  6. Hive SQL: 四个在工作后才知道的SQL密技
  7. Messaging 铃声
  8. vSphere Client :Windows虚拟机恢复密码
  9. python爬取淘宝商品页面信息
  10. 怒飞垂云视频教程 三、基于eclipse编译飞控固件