中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Python寫腳本實現完全備份和增量備份

發布時間:2021-04-25 10:03:59 來源:億速云 閱讀:212 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關怎么用Python寫腳本實現完全備份和增量備份的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

python有哪些常用庫

python常用的庫:1.requesuts;2.scrapy;3.pillow;4.twisted;5.numpy;6.matplotlib;7.pygama;8.ipyhton等。

需求:

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

思路及關鍵點:

建立一個文件,以字典方式記錄src的文件名以及文件對應的md5的值

完全備份的時候將文件名和md5值寫在一個文件里面。cPickle的知識點。

增量備份的時候比較文件名是否在key里面,沒有就要備份;有的話,這個文件的md5值是否改變,改變了就要備份

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

time.strftime()判斷周幾

cPickle,可以無損記錄所有Python的變量類型。文件操作。

tarfile對文件打包的使用

hashlib用于計算文件md5的值。注意不要一次打開一個文件,4k地打開,防止打開一個超大文件爆內存。

with file()可以打開一個文件之后不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寫腳本實現完全備份和增量備份”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南阳市| 大庆市| 朝阳县| 绵阳市| 雷波县| 澄迈县| 同仁县| 海淀区| 沙湾县| 湘潭市| 夹江县| 公主岭市| 焦作市| 南和县| 隆林| 蒙阴县| 长武县| 丰宁| 谢通门县| 西平县| 沙田区| 凌海市| 堆龙德庆县| 高唐县| 依安县| 祁连县| 宜良县| 郴州市| 水城县| 新密市| 阿拉善左旗| 彰武县| 西峡县| 肥西县| 仁布县| 石门县| 右玉县| 自贡市| 湾仔区| 呼和浩特市| 红河县|