日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python备份发包脚本_Python备份脚本,python

發布時間:2024/10/14 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python备份发包脚本_Python备份脚本,python 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

編寫backup.py腳本,實現以下目標:

需要支持完全和增量備份

周一執行完全備份

其他時間執行增量備份

備份文件需要打包為tar文件并使用gzip格式壓縮

整體框架創建3個函數,分別實現完全備份、增量備份、文件加密3種功能:

1.首先導入time模塊,利用if進行判斷,如果當地時間是星期一,執行完全備份函數,否則執行增量備份函數,其中,通配符%a代表時間星期幾縮寫,上傳參數分別為要備份的原目錄、目標目錄、md5字典存放目錄

2.調用完全備份函數:

a)首先獲取新文件名,將新文件名放入目標目錄下,目的是定義備份文件的絕對路徑,以寫壓縮方式打開目標目錄下新文件,將原目錄寫入新文件中,完成完全備份,其中os.path.join作用是將目錄名和文件的基名拼接成一個完整的路徑

b)了解os.walk()目錄遍歷器輸出文件結構,利用for循環將要備份原目錄中文件遍歷出來作為字典鍵值對鍵, md5加密結果作為字典鍵值對的值(此時將原目錄中文件作為上傳參數調用文件加密函數),存入空字典中,字典中每個文件對應一個md5值,最后將字典寫入到md5字典存放目錄中

3.調用文件加密函數:將原目錄文件循環讀取逐一加密,返回加密結果

4.調用增量備份函數:

a)增量備份函數代碼與完全備份函數基本一致

b)區別在于,備份前要先以二進制讀方式打開md5字典存放目錄,讀取舊數據,判斷舊數據中鍵對應的加密值與新加密值是否相同,如果不相同,則將新增內容寫入到目標文件中(即只備份新數據)

5.注意:md5主要用于原文件與新文件判斷

步驟一:編寫腳本

vim backup.py

#!/usr/bin/env python3

import time

import os

import tarfile

import hashlib

import pickle

#用于判斷兩個文件是否相同,提取每個文件中的前4字節的內容然后輸出md5碼進行比較

def check_md5(fname):

m = hashlib.md5()

with open(fname, 'rb') as fobj:

while True:

data = fobj.read(4096)

if not data:

break

m.update(data)

return m.hexdigest()

def full_backup(src_dir, dst_dir, md5file):

fname = os.path.basename(src_dir.rstrip('/'))

fname = '%s_full_%s.tar.gz' % (fname, time.strftime('%Y%m%d'))

fname = os.path.join(dst_dir, fname)

md5dict = {}

tar = tarfile.open(fname, 'w:gz')

tar.add(src_dir)

tar.close()

for path, folders, files in os.walk(src_dir):

for each_file in files:

key = os.path.join(path, each_file)

md5dict[key] = check_md5(key)

with open(md5file, 'wb') as fobj:

pickle.dump(md5dict, fobj)

def incr_backup(src_dir, dst_dir, md5file):

fname = os.path.basename(src_dir.rstrip('/'))

fname = '%s_incr_%s.tar.gz' % (fname, time.strftime('%Y%m%d'))

fname = os.path.join(dst_dir, fname)

md5dict = {}

with open(md5file, 'rb') as fobj:

oldmd5 = pickle.load(fobj)

for path, folders, files in os.walk(src_dir):

for each_file in files:

key = os.path.join(path, each_file)

md5dict[key] = check_md5(key)

with open(md5file, 'wb') as fobj:

pickle.dump(md5dict, fobj)

tar = tarfile.open(fname, 'w:gz')

for key in md5dict:

if oldmd5.get(key) != md5dict[key]:

tar.add(key)

tar.close()

if __name__ == '__main__':

# mkdir /tmp/demo; cp -r /etc/security /tmp/demo

src_dir = '/tmp/demo/security'

dst_dir = '/var/tmp/backup' # mkdir /var/tmp/backup

md5file = '/var/tmp/backup/md5.data'

if time.strftime('%a') == 'Mon':

full_backup(src_dir, dst_dir, md5file)

else:

incr_backup(src_dir, dst_dir, md5file)

步驟二:測試腳本執行

python3 backup.py

cd /var/tmp/backup/

ls

md5.data security_full_20180502.tar.gz security_incr_20180502.tar.gz

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的python备份发包脚本_Python备份脚本,python的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。