Shell腳本實現按目錄備份、發佈、回滾

分享最近寫的一段Shell腳本,用來實現按發佈包的文件目錄結構備份生產線文件,以及回滾操做。spa

  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
相關文章
相關標籤/搜索