為了增量備份利用 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
留言