為了增量備份利用 tar 的 -g參數

tar -cf backup_`date +%F`.tar -g backup_`date +%F`.snapshot /path/source/

首次執行時,會將source這目錄(即整個source裡的資料)作成tarball檔,
並在daily-snapshot-file檔案裡記錄時間點,
第二次執行時,根據daily-snapshot-file裡的時間點,與在現執行時的時間點,
檢查是否有變動的資料,有更新便只把更新檔案的作成tarball檔,並更新daily-snapshot-file裡的時間點,
無更新時也會有tarball檔產生,但裡面無資料,而daily-snapshot-file的時間點也會作變動。

假如source裡還有目錄的話,它是同理的。

如果持續作這動作,可能要考慮寫個script來針對snapshot這檔作置換一下,

因為每執行一次,照著`date +%F`的話,時間點會從新計算,

 

範例:

   cp backup_20051221.snapshot backup_20051221.snapshot.old

   tar -cf backup_20051222.tar -g backup_20051221.snapshot /path/source

   mv  backup_20051221.snapshot  backup_20051222.snapshot

使用 find 來作輔助
找出昨天到現在時間裡的檔案作成 tarball

tar -cf data.tar `find /path/* -mtime -1 ! -type d -print`

   -mtime -1
      -1表示前一天。

   ! -type d
      或者是
   -type f
      如果沒加這個參數,它會把/path/底下的目錄的裡的全部資料(包含舊的)都備出來

   -print
      表示標準輸出,每個檔有路徑且一行一行列出。但路徑要看find指令後面接什麼路徑,

如果為./path,輸出的路徑就成./xxx/data.txt,如果為/path/*,輸出的路徑就成/path/data.txt,
並注意 find後面接的路徑,如果為/path/,則交給tar後,產生的檔案會與為/path/*產生的不同,
而/path/*的才是正確的,/path/所產生的tarball會多出一倍的容量。

比較兩種方式,當搭配了crontab時,
使用 find的方式,需要去計算在crontab裡排程的時間與-mtime參數的時間之間的差距,
假如排程每七日執行一次,而-mtime就要設定為-8。
使用 tar -g的方式,就不用去管時間差距,到時排程一執行,它會自動去讀daily-snapshot-file裡與現在的時間差。

其它範例

比這時間還新的檔案做 tar,不過用這方法不準,會參雜其它日期的

tar -N "20050909" -cf data.tar /path/

依date參數%Y/%m/%d產生出來的現在時間,的四天前做tar

如果現在時間為2005-12-04,要tar作2005-10-22天後的日期,"4 days ago"改為"43 days ago"

tar -jcvf /path/aletw.bz2 –newer-mtime `date -d "4 days ago" +%Y/%m/%d` /path 

2008/01/22  單純使用 tar 依日期作差異的話它會把空目錄也 tar 進來,所以還是搭配 find 吧
                           find 目錄 -mtime -1 ! -type d -print  > include.txt
                           tar zcvf xxx.tar.gz -T include.txt

最後修改日期: 2006 年 11 月 14 日

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。