#!/root/kl/bin/python3
# author:kl
#對檔案周一進行完全備份,周二到週日進行增量備份
#根據md5校驗
import tarfile
import hashlib
import os
from time import strftime
import pickle
defcheck_md5
(fname)
:# 計算檔案md5值的函式,接收檔名,返回md5值
m = hashlib.md5(
)with
open
(fname,
'rb'
)as fobj:
while1:
data = fobj.read(
4096)if
not data:
break
m.update(data)
return m.hexdigest(
)def
full_backup
(src, dst, md5file)
:# 拼接出備份檔案的絕對路徑
fname = os.path.basename(src)
fname =
'%s_full_%s.tar.gz'
%(fname, strftime(
'%y-%m-%d'))
fname = os.path.join(dst, fname)
# 完全備份,就是把整個目錄壓縮
tar = tarfile.
open
(fname,
'w:gz'
) tar.add(src)
tar.close(
)# 計算每個檔案的md5值
md5dict =
for path, folers, files in os.walk(src)
:for
file
in files:
key = os.path.join(path,
file
) md5dict[key]
= check_md5(key)
# 將md5值存入檔案
with
open
(md5file,
'wb'
)as fobj:
pickle.dump(md5dict, fobj)
defincrese_backup
(src, dst, md5file)
:# 拼接出備份檔案的絕對路徑
fname = os.path.basename(src)
fname =
'%s_increse_%s.tar.gz'
%(fname, strftime(
'%y-%m-%d'))
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:
if md5dict[key]
!= old_md5.get(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'
if strftime(
'%a')==
'mon'
: full_backup(src, dst, md5file)
else
: increse_backup(src, dst, md5file)
Python 備份檔案,以及備份大檔案
今天分享乙個很有用的小 就是關於檔案的備份 import os 匯入os模組 ori file name r e python mayday.輸入檔案路徑 if os.path.isfile ori file name 判斷該路徑的是否是檔案 擷取檔名,重組檔名 seek num ori file ...
python 備份檔案指令碼
usr bin env python filename backup ver1.pyimport os import time source r d python test r d python test1 target dir d python test2 remember to change t...
python實現檔案的備份
現實生活中很多檔案需要備份,這裡寫一下用python程式實現檔案的備份。提示輸 件 oldfilename input 請輸 要拷 的 件名字 table of contents 應 1 製作 件的備份 11 以讀的 式開啟 件 oldfile open oldfilename,rb 提取 件的字尾...