2008
11.06

Linux 檔案備份的寫法(Shell Script)

最近工作接觸到一些老伺服器,上面檔案需要例行備份,我看在 /etc/Crontab 裡面的寫法沒有 rotate 機制,所以自己稍做修改,大致寫法如下:

#!/bin/sh
# all www file backup - by roga@roga.tw

backup_dir="/home/roga/backup"
#這是備份放置的位置
source_dir="/usr/local/apache2/htdocs"
#這是檔案放置的位置

MKDIR="$(which mkdir)"
TAR="$(which tar)"
MV="$(which mv)"

# if(!dir){create(new);}
test ! -d "$backup_dir/0/" && $MKDIR "$backup_dir/0/"

# tar zcv all file
$TAR zcPf www.tgz $source_dir
$MV www.tgz "$backup_dir/0/"

# delete the oldest backup
test -d "$backup_dir/10/" && rm -rf "$backup_dir/10"

# rotate
for int in 9 8 7 6 5 4 3 2 1 0
do
    if(test -d "$backup_dir"/"$int")
    then
        next_int=`expr $int + 1`
        $MV "$backup_dir"/"$int" "$backup_dir"/"$next_int"
    fi
done

exit 0;

注意:rotate 是很一般的寫法,大家都這樣寫,不過特別要注意的是我有在 tar 加上 P 參數,這樣才能對應絕對路徑,要不然怎麼跑都是錯的。還有,檔案分十個目錄存放,越新的檔案目錄數字越小,當然也可以稍做修改讓存放規則相反。

2 comments so far

Add Your Comment
  1. 我都很偷懶
    tar czPf /somewhere/somedata_`/bin/date +\%w`.tar.gz somedata
    直接一個禮拜 rotate 一次 XD
    不然你要一個月都壓同一個也是可以 /bin/date +\%m

  2. 我都是用cp -u來做的-.-a
    有更新再備份
    沒更新就放著…..

    對磁碟機的損耗比較不會那麼大

:D :-) :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>