要求/tmp/demo/security星期一做完全備份其餘時間做增量備份
import os
from time import strftime
import hashlib
import tarfile
import pickle
defmd5files
(fname)
: m = hashlib.md5(
)with
open
(fname,
'rb'
)as f1:
while1:
data = f1.read(
4096)if
not data:
break
m.update(data)
return m.hexdigest(
)def
full_back
(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_list =
data = os.walk(src)
for path,mk,files in data:
forfile
in files:
pathfname = os.path.join(path,
file
) md5_list[pathfname]
= md5files(pathfname)
with
open
(md5file,
'wb'
)as obj:
pickle.dump(md5_list,obj)
defincr_back
(src,dst,md5file)
: fname = os.path.basename(src)
fname =
'%s_incr_%s.tar.gz'
%(fname, strftime(
'%y%m%d'))
fname = os.path.join(dst, fname)
tar = tarfile.
open
(fname,
'w:gz'
) md5_list =
data = os.walk(src)
for path, mk, files in data:
forfile
in files:
pathfname = os.path.join(path,
file
) md5_list[pathfname]
= md5files(pathfname)
with
open
(md5file,
'rb'
)as f1:
old_md5list = pickle.load(f1)
for key in md5_list:
if old_md5list.get(key)
!= md5_list[key]
: tar.add(key)
tar.close(
)with
open
(md5file,
'wb'
)as f2:
pickle.dump(md5_list,f2)
if __name__ ==
'__main__'
: src =
'/tmp/demo/security'
dst =
'/tmp/demo/backup'
md5file =
'/tmp/demo/bakup/md5.data'
if strftime(
'%a')==
'mon'
: full_back(src,dst,md5file)
else
: incr_back(src,dst,md5file)
今天是星期一執行這個指令碼做完全備份在/tmp/demo/backup下面會出現打包檔案為了證明是和原始檔一樣我對其進行了解包發現是一樣的
tar -xf security_full_20200629.tar.gz
cd /tmp/demo/security
lsaccess.conf console.handlers group.conf namespace.conf opasswd sepermit.conf
chroot.conf console.perms limits.conf namespace.d pam_env.conf time.conf
假設在星期二的時候在/tmp/demo/security下面建立了乙個名為txt的檔案內容是hello world然後再次執行指令碼可以在/tmp/demo/backup看到增量備份檔案
然後為了證明增量備份的檔案是txt我對該增量備份檔案進行了解包
用Windows API編寫乙個精確定時的迴圈
這幾天跟討論乙個程式優化問題時,遇到乙個需要延時的迴圈,結合我所知道的知識,並突發靈感,想到了用windows系統提供的定時器api寫乙個精確延時迴圈的方法。for int i 0 i maxcount i 基於sleep延時的不穩定,不精確性,這個迴圈延時,效果非常的糟糕,我想到的改進辦法就是使用...
python編寫乙個使用者登入程式
print 新建使用者 n n print 登入賬號 e e print 退出程式 q q contact dict while 1 a input 請輸入指令 if a n or a n name input 請輸入使用者名稱 if name in contact name input 此使用者已...
用python編寫乙個小遊戲
1.隨機生成兩個數字 1 1000 在控制台中隨機獲取兩個數字相加 如果使用者輸入正確得10分,否則扣10分。總共5道題,最後輸出得分 import random grade 0for i in range 5 num1 random.randint 1,100 num2 random.randin...