作者 主題: [最佳]備份的script如何保持三個備份不要多?  (閱讀 2436 次)

0 會員 與 1 訪客 正在閱讀本文。

jochang6

  • 憂鬱的高中生
  • ***
  • 文章數: 177
    • 檢視個人資料
參考了些範例,小弟嘗試寫個備份的script,遇到問題
如下的備份已可以執行沒問題

#!/bin/sh
echo "Backup Start......"
date >> /root/backup.txt
BAKDATE=`date "+%Y%m%d"`;export BAKDATE
tar zcvf /root/webback$BAKDATE.tar.gz /var/www/html
echo "Backup Done......"

但如果如此一直執行勢必會越來越多,所以想有限制的功能
我的想法是把webback*的數量抓出來成變數
然後判斷此變數是否大於3,大於就把舊的刪掉
問題來了,可以用下列的指令把webback*的數量找出
ls /root/webback* | wc -l
可是試了很多方式都無法讓它便成一個變數,各位大大請指點!thanks

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[最佳]備份的script如何保持三個備份不要多?
« 回覆 #1 於: 2003-06-25 23:35 »
看來你還欠缺臨門一腳哦

你要備份三份 ...假設是 0 1 2 的循環好了....
我第一個想法是用 date 來做...
date +%j 可以得到 001~366  
再用
date -d "-2 day" +%j 可以得到二天前的 day 是多少
再用
expr  day % 3
接到變數我想你巳會了....
跨年怎麼辨....那用秒吧 ........

你的問題在於腦筋沒轉過來 ...就差一點而以

jerryhuang

  • 憂鬱的高中生
  • ***
  • 文章數: 173
    • 檢視個人資料
[最佳]備份的script如何保持三個備份不要多?
« 回覆 #2 於: 2003-06-26 00:15 »
建議你可以用 logrotate 這支程式來達到目的,有現成的就沒必要自己寫一個!
如果你堅持要自己寫一個的話!可以用 ls -t 這樣可以使 ls 的輸出照時間排序
前二個一定是最新的了。給你一個方向這應該夠了吧!
另外
a=`ls -lt|wc -l`
echo $a
這樣子就可以變成變數了,建議先去把相關的資料看一看,你可以更快的解決問題。

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17465
    • 檢視個人資料
    • http://www.study-area.org
[最佳]備份的script如何保持三個備份不要多?
« 回覆 #3 於: 2003-06-26 00:43 »
嗯,ls -t 不錯...  ^_^
若按順序抓出了 file name,
再用 tail +4 就可得到前三份之外的 list ,
然後丟給 rm 就行了...

徐義

  • 可愛的小學生
  • *
  • 文章數: 7
    • 檢視個人資料
[最佳]備份的script如何保持三個備份不要多?
« 回覆 #4 於: 2003-06-26 16:16 »
對喔
用logrotate
0 mv 1
1 mv 2
2 mv 3
rm 3

jochang6

  • 憂鬱的高中生
  • ***
  • 文章數: 177
    • 檢視個人資料
[最佳]備份的script如何保持三個備份不要多?
« 回覆 #5 於: 2003-06-27 20:02 »
謝謝各位大大回應!!以下是結果已測過可正常工作!!
極為簡陋供各位參考!
abelyang大的做法對我來說太深了,我還不是很了解,研究中!

#!/bin/sh
echo "Backup Start......"
date >> /root/backup.txt
#BAKDATE=`date "+%Y%m%d"`;export BAKDATE
BAKDATE=`date "+%m%d"`;export BAKDATE
tar zcvf /root/webback$BAKDATE.tar.gz /var/www/html
declare -i a=`ls -lt /root/webback* | wc -l`
echo "now have $a backup files!"
b=`ls -t /root/webback*|tail +4`
#a is webback number
if [ $a = 3 ]; then
  echo "now have 3 backup files!"
else
  echo "rm $b"
  rm -rf $b
fi
echo "Backup Done......"

yc123

  • 懷疑的國中生
  • **
  • 文章數: 84
    • 檢視個人資料
[最佳]備份的script如何保持三個備份不要多?
« 回覆 #6 於: 2003-06-28 06:59 »
用find + rm也可以.有錯請指教.

find /root -name 'webback*' -atime +3 -print -exec rm -f {} \;