需求:
在/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...