這篇文章給大家分享的是有關(guān)怎么用Python寫(xiě)腳本實(shí)現(xiàn)完全備份和增量備份的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
python常用的庫(kù):1.requesuts;2.scrapy;3.pillow;4.twisted;5.numpy;6.matplotlib;7.pygama;8.ipyhton等。
需求:
在/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)有就要備份;有的話,這個(gè)文件的md5值是否改變,改變了就要備份
os.path.join()拼接路徑,os.listdir(),os.chdir()
time.strftime()判斷周幾
cPickle,可以無(wú)損記錄所有Python的變量類型。文件操作。
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() ~
感謝各位的閱讀!關(guān)于“怎么用Python寫(xiě)腳本實(shí)現(xiàn)完全備份和增量備份”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
本文題目:怎么用Python寫(xiě)腳本實(shí)現(xiàn)完全備份和增量備份-創(chuàng)新互聯(lián)
分享地址:http://www.rwnh.cn/article44/dopdee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計(jì)公司、網(wǎng)頁(yè)設(shè)計(jì)公司、云服務(wù)器、營(yíng)銷型網(wǎng)站建設(shè)、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容