문서의 전체 백업 및 증가분 백업
import hashlib # ,
import tarfile #
from time import strftime #
import os
import pickle #pickle
def check_md5(fname): # md5
m = hashlib.md5() # md5 ,
with open(fname, 'rb') as fobj: # ,
while True:
data = fobj.read(4096) # 4k
if not data:
break
m.update(data) # , md5
return m.hexdigest() # , md5
def full_backup(src, dst, md5file): #
fname = '%s_full_%s.tar.gz' % (os.path.basename(src), strftime('%Y%m%d')) # :xxx_full_20190710.tar.gz
# :/tmp/demp/backup/xxx_full_20190710.tar.gz
fname = os.path.join(dst, fname)
#
tar = tarfile.open(fname, 'w:gz') # gz
tar.add(src)
tar.close() #
# md5
md5dict = {} # md5
#os.walk [ ][ ][ ]
for path, folders, files in os.walk(src):
for file in files:
# ,
key = os.path.join(path, file) #
md5dict[key] = check_md5(key) # md5
# md5
#wb , ,
with open(md5file, 'wb') as fobj:
pickle.dump(md5dict, fobj) # pickle.dump
#
# : md5 , md5 ,
def incr_backup(src, dst, md5file):
fname = '%s_incr_%s.tar.gz' % (os.path.basename(src), strftime('%Y%m%d')) #xxx_incr_20190710.tar.gz
#/tmp/demo/backup/xxx_incr_20190710.tar.gz
fname = os.path.join(dst, fname)
# md5
md5dict = {}
for path, folders, files in os.walk(src):
for file in files:
key = os.path.join(path, file)
md5dict[key] = check_md5(key)
# md5
with open(md5file, 'rb') as fobj:
old_md5 = pickle.load(fobj)
# ,
tar = tarfile.open(fname, 'w:gz')
for key in md5dict: # md5
# ,old_md5.get(key) , ,old_md5.get(key) md5 ,
if old_md5.get(key) != md5dict[key]:
tar.add(key)
tar.close()
# md5 ,
with open(md5file, 'wb') as fobj:
pickle.dump(md5dict, fobj)
if __name__ == '__main__':
src = '/tmp/demo/security' # ,
dst = '/tmp/demo/backup' #
md5file = '/tmp/demo/backup/md5.data' #md5
if strftime('%a') == 'Mon': #
full_backup(src, dst, md5file)
else:
incr_backup(src, dst, md5file)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.