最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用Python寫(xiě)腳本,實(shí)現(xiàn)完全備份和增量備份的示例

 更新時(shí)間:2018年04月29日 08:48:14   作者:huangyingleo  
下面小編就為大家分享一篇用Python寫(xiě)腳本,實(shí)現(xiàn)完全備份和增量備份的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

需求:

在/root/backup下面有兩個(gè)文件夾dst和src。要求在周一的時(shí)候進(jìn)行完全備份,其余日子進(jìn)行增量備份。從src備份到dst。

思路及關(guān)鍵點(diǎn):

建立一個(gè)文件,以字典方式記錄src的文件名以及文件對(duì)應(yīng)的md5的值

完全備份的時(shí)候?qū)⑽募蚼d5值寫(xiě)在一個(gè)文件里面。cPickle的知識(shí)點(diǎn)。

增量備份的時(shí)候比較文件名是否在key里面,沒(méi)有就要備份;有的話(huà),這個(gè)文件的md5值是否改變,改變了就要備份

os.path.join()拼接路徑,os.listdir(),os.chdir()

time.strftime()判斷周幾

cPickle,可以無(wú)損記錄所有Python的變量類(lèi)型。文件操作。

tarfile對(duì)文件打包的使用

hashlib用于計(jì)算文件md5的值。注意不要一次打開(kāi)一個(gè)文件,4k地打開(kāi),防止打開(kāi)一個(gè)超大文件爆內(nèi)存。

with file()可以打開(kāi)一個(gè)文件之后不f.close()

#!/usr/bin/env python
import time
import os
import cPickle as p
import tarfile
import hashlib
baseDir = '/root/backup'
srcDir = 'src'
dstDir = 'dst'
fullName = "full_%s_%s.tar.gz" % (srcDir, time.strftime('%Y%m%d'))
incrName = "incr_%s_%s.tar.gz" % (srcDir, time.strftime('%Y%m%d'))
md5file = 'md5.data'
def md5sum(fname):
 m = hashlib.md5()
 with file(fname) as f:
  while True:
   data = f.read(4096)
   if len(data) == 0:
    break
   m.update(data)
 return m.hexdigest()
def fullBackup():
 md5Dict = {}
 fileList = os.listdir(os.path.join(baseDir,srcDir))
 for eachFile in fileList:
  md5Dict[eachFile] = md5sum(os.path.join(baseDir,srcDir,eachFile))
 with file(os.path.join(baseDir,dstDir,md5file),'w') as f:
  p.dump(md5Dict,f)
 tar = tarfile.open(os.path.join(baseDir,dstDir,fullName),'w:gz')
 os.chdir(baseDir)
 tar.add(srcDir)
 tar.close()
def incrBackup():
 newmd5 = {}
 fileList = os.listdir(os.path.join(baseDir,srcDir))
 for eachFile in fileList:
  newmd5[eachFile] = md5sum(os.path.join(baseDir,srcDir,eachFile))
 with file(os.path.join(baseDir,dstDir,md5file)) as f:
  storedmd5 = p.load(f)
 tar = tarfile.open(os.path.join(baseDir,dstDir,incrName),'w:gz')
 os.chdir(baseDir)
 for eachKey in newmd5:
  if (eachKey not in storedmd5) or (newmd5[eachKey] != storedmd5[eachKey]):
   tar.add(os.path.join(srcDir,eachKey))
 tar.close()
 with file(os.path.join(baseDir,dstDir,md5file),'w') as f:
  p.dump(newmd5,f)
def main():
 if time.strftime('%a') == 'Mon':
  fullBackup()
 else:
  incrBackup()
if __name__ == '__main__':
 main()
~  

以上這篇用Python寫(xiě)腳本,實(shí)現(xiàn)完全備份和增量備份的示例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

高邮市| 镇平县| 沅陵县| 土默特左旗| 门源| 卓资县| 芮城县| 确山县| 内黄县| 石楼县| 德安县| 余姚市| 湖州市| 清原| 册亨县| 襄樊市| 清涧县| 嵩明县| 屯门区| 江川县| 浦县| 洞头县| 桂平市| 高邑县| 子长县| 罗田县| 鄯善县| 永济市| 运城市| 德安县| 张家口市| 新疆| 元江| 仙居县| 古蔺县| 松江区| 巴东县| 商城县| 福建省| 阿城市| 肇州县|