標籤:
今天開始自己的shell指令碼練習,剛好公司有太伺服器,要時間對資料的cp是按月的:
考慮:首先尋找規律,發現都放置在/opt/www/aaa/ 裡面有很多的2級和3級目錄和檔案,但我追蹤要備份的是年月為檔案名稱的格式:2015_06
這樣的格式,首先我們不清楚這個目錄下有多少這樣的2015_06的子目錄所以需要統計:
find /opt/www/aaa -name 2015_06 查看了下我要備份的地方#!/bi#admin fengtaotao Email:23956580@qq.com
#Fri Jul 3 16:35:48 CST 2015 pathh=/opt/www/acc/musicFile/ @首先定義的是源檔案路徑 pathd=/opt2/musicFile/ @要備份到的路徑datem=`date +%m` @這裡我定義一個當前月的顯示 原因是我在crontab中是要備份的是上個月的#getMonth @簡單的注釋 我喜歡吧注釋寫在行代碼下面if [ "$datem" == 01 ];then @當前月是1月份那麼當前年-1從而備份去年的12月份
datem="_12" @如果 當前月是1月份 那麼僵變數修改為12月份
datey=`date +%Y`
datey=$(($datey-1)) @將年份改為去年 這樣就是去年的12月份
else
datem="_0$(($datem-1))" datey=`date +%Y` @考慮到每年的1月份要備份去年的fi
#getFullYear
dird="$datey$datem"#echo "$dird"readd=`date +%N`.txtfind $pathh -name $dird &>> $readdfor i in $(cat $readd);do aac=$(echo $i | awk -F "/" ‘{print $6"/"$7"/"}‘) aac=${pathd}${aac} cp -r $i $aac &>> dbcp.logdonerm -rf $readd
OK 接下來修改下許可權和crontab 的定時
chmod u+x dbback.shcrontab -e0 1 1 * * /root/bash/dbback.sh沒個月的1號 淩晨1點整開始備份
2.當然我也寫了一個手動備份的指令碼
#!/bin/bash#admin fengtaotao Email:23956580@qq.com#Fri Jul 3 16:35:48 CST 2015pathh=/opt/www/morp/musicFile/pathd=/opt2/musicFile/touch ulist.txtreadd=ulist.txtfor a in $(cat list.txt);do find $pathh -name $a &>> $readddonefor i in $(cat $readd);do aac=$(echo $i | awk -F "/" ‘{print $6"/"$7"/"}‘) aac=${pathd}${aac} cp -r $i $aac &>>dbcp.logdonerm -rf $readd
這個我們可以再指令碼的同目錄下 建立一個list.txt文檔,在裡面寫入我們需要備份的名稱列表預設是換行為一個名稱
shell指令碼筆記(原創不斷記錄)