为了增量备份利用 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
