python編寫乙個規定時間打包檔案的腳步

2021-10-07 15:25:31 字數 3071 閱讀 6755

要求/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...