用Python寫指令碼,完全備份和增量備份

2021-07-26 20:36:30 字數 2408 閱讀 6353

需求:

在/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'

defmd5sum

(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()

deffullbackup

(): 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()

defincrbackup

(): 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)

defmain

():if time.strftime('%a') == 'mon':

fullbackup()

else:

incrbackup()

if __name__ == '__main__':

main()

~

用Python寫指令碼,實現完全備份和增量備份的示例

需求 在 root backup下面有兩個資料夾dst和src。要求在周一的時候進行完全備份,其餘日子進行增量備份。從src備份到dst。思路程式設計客棧及關鍵點 建立乙個檔案,以字典方式記錄src的檔名以及檔案對應的md5的值 完全備份的時候將檔名和md5值寫在乙個檔案裡面。cpickle的知識點...

用python寫指令碼跑程式 2020 10 15

公司最近接了乙個新專案,支氣管導航。為了驗證軟體的功能,就需要跑很多例項,這時候就會用到指令碼跑資料,就不需要一遍遍手動執行軟體。先上 import os import sys import subprocess extractionexe airwaycenterlineextractioneng...

mysql完全備份,增量備份及恢復指令碼

剛進入公司時,領導分配的實驗任務,這是我寫的第乙個比較完整和滿意的mysql全備,増備及恢復指令碼,歡迎指點!如下!bin bash full increment backup and recover 說明 事先要確保存在 data bak目錄,且要保證在執行增量備份時已做過至少一次全量備份,否則找...