分享最近寫的一段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