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

2022-10-04 19:48:12 字數 2437 閱讀 2741

需求:

在/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(www.cppcns.combasedir,srcdir))

for eachfile in filelist:

md5dict[eachfile] = md5sum(os.path程式設計客棧.join(basedir,srcdir,eachbmgpormfxfile))

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寫指令碼,實現完全備份和增量備份的示例

本文位址:

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

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

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

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

keepalived配置指令碼實現主備切換

環境 vmvare下centos7.2 防火牆開啟 sellinux關閉 1通過yum安裝keepalived 2修改主的 etc keepalived keepalived.conf修改為如下內容 configuration file for keepalived global defs vrrp...