最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)網(wǎng)站文件的全備份和差異備份

 更新時(shí)間:2014年11月30日 20:15:41   投稿:mdxy-dxy  
這篇文章主要介紹了Python實(shí)現(xiàn)網(wǎng)站文件的全備份和差異備份,需要的朋友可以參考下

之前有寫利用md5方式來做差異備份,但是這種md5方式來寫存在以下問題:

•md5sum獲取有些軟連接的MD5值存在問題
•不支持對(duì)空目錄進(jìn)行備份,因?yàn)閙d5sum無法獲取空目錄的md5值
•權(quán)限的修改md5sum無法判斷

解決方案:

利用文件的mtime ctime

mtime(Modified time)是在寫入文件時(shí)隨文件內(nèi)容的更改而更改的
ctime(Create time)是在寫入文件、更改所有者、權(quán)限或鏈接設(shè)置時(shí)隨Inode的內(nèi)容更改而更改的
廢話不多說直接上代碼:

#!/usr/bin/env python
import time,os,sys,cPickle

fileInfo = {}

def logger(time,fileName,status,fileNum):
  f = open('backup.log','a')
  f.write("%s\t%s\t%s\t\t%s\n" % (time,fileName,status,fileNum))

def tar(sDir,dDir,fileNum):
  command = "tar zcf %s %s >/dev/null 2>&1" % (dDir + ".tar.gz",sDir)
  if os.system(command) == 0:
    logger(time.strftime('%F %X'),dDir + ".tar.gz",'success',fileNum)
  else:
    logger(time.strftime('%F %X'),dDir + ".tar.gz",'failed',fileNum)

def fullBak(path):
  fileNum = 0
  for root,dirs,files in os.walk(path):
    for name in files:
      file = os.path.join(root, name)
      mtime = os.path.getmtime(file)
      ctime = os.path.getctime(file)
      fileInfo[file] = (mtime,ctime)
      fileNum += 1
  f = open(P,'w')
  cPickle.dump(fileInfo,f)
  f.close()
  tar(S,D,fileNum)

def diffBak(path):
  for root,dirs,files in os.walk(path):
    for name in files:
      file = os.path.join(root,name)
      mtime = os.path.getmtime(file)
      ctime = os.path.getctime(file)
      fileInfo[file] = (mtime,ctime)

  if os.path.isfile(P) == 0:
    f = open(P,'w')
    f.close()

  if os.stat(P).st_size == 0:
    f = open(P,'w')
    cPickle.dump(fileInfo,f)
    fileNum = len(fileInfo.keys())
    f.close()
    print fileNum
    tar(S,D,fileNum)
  else:
    f = open(P)
    old_fileInfo = cPickle.load(f)
    f.close()
    difference = dict(set(fileInfo.items())^set(old_fileInfo.items()))
    fileNum = len(difference)
    print fileNum

    difference_file = ' '.join(difference.keys())
    print difference_file

    tar(difference_file,D,fileNum)
    f = open(P,'w')
    cPickle.dump(fileInfo,f)
    f.close()

def Usage():
  print '''
    Syntax: python file_bakcup.py pickle_file model source_dir filename_bk
      model: 1:Full backup 2:Differential backup

    example: python file_backup.py fileinfo.pk 2 /etc etc_$(date +%F)
      explain: Automatically add '.tar.gz' suffix
  '''
  sys.exit()

if len(sys.argv) != 5:
  Usage()

P = sys.argv[1]
M = int(sys.argv[2])
S = sys.argv[3]
D = sys.argv[4]

if M == 1:
  fullBak(S)
elif M == 2:
  diffBak(S)
else:
  print "\033[;31mDoes not support this mode\033[0m"
  Usage()

測試:

$ python file_backup.py data.pk 1 data data_$(date +%F) #全備份
$ > data/m.fzitv.net #測試創(chuàng)建文件,修改文件權(quán)限
$ chmod 777 data/py/eshop_bk/data.db
$ python file_backup.py data.pk 2 data data_$(date +%F)_1 #備份改變的文件
2
data/py/eshop_bk/data.db data/m.fzitv.net

看了博主的代碼,很受啟發(fā),但是有一個(gè)問題,如果我完成完整備份之后,刪除了其中某個(gè)文件,再做差異備份,可以檢測出被刪除的文件,但是執(zhí)行tar就會(huì)出錯(cuò),因?yàn)檫@個(gè)文件已經(jīng)是不存在的了,所以在執(zhí)行tar之前,最好用os.path.exists()判斷一下差異文件路徑是否存在,如果不存在則不執(zhí)行tar, 反饋一條文件刪除信息。

相關(guān)文章

  • 終端命令查看TensorFlow版本號(hào)及路徑的方法

    終端命令查看TensorFlow版本號(hào)及路徑的方法

    今天小編就為大家分享一篇終端命令查看TensorFlow版本號(hào)及路徑的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python pyautogui實(shí)現(xiàn)圖片識(shí)別點(diǎn)擊失敗后重試功能

    python pyautogui實(shí)現(xiàn)圖片識(shí)別點(diǎn)擊失敗后重試功能

    這篇文章主要介紹了python pyautogui實(shí)現(xiàn)圖片識(shí)別點(diǎn)擊失敗后重試效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • Ubuntu下使用Python實(shí)現(xiàn)游戲制作中的切分圖片功能

    Ubuntu下使用Python實(shí)現(xiàn)游戲制作中的切分圖片功能

    這篇文章主要介紹了Ubuntu下使用Python實(shí)現(xiàn)游戲制作中的切分圖片功能,涉及Python針對(duì)圖片的讀取、載入、切分運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • Python Web日志管理與監(jiān)控實(shí)踐指南

    Python Web日志管理與監(jiān)控實(shí)踐指南

    這篇文章主要介紹了Python Web日志管理與監(jiān)控實(shí)踐指南,文中通過代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-09-09
  • Pycharm同步遠(yuǎn)程服務(wù)器調(diào)試的方法步驟

    Pycharm同步遠(yuǎn)程服務(wù)器調(diào)試的方法步驟

    這篇文章主要介紹了Pycharm同步遠(yuǎn)程服務(wù)器調(diào)試,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python與CNN的碰撞詳解

    Python與CNN的碰撞詳解

    CNN,即卷積神經(jīng)網(wǎng)絡(luò),主要用于圖像識(shí)別,分類。由輸入層,卷積層,池化層,全連接層(Affline層),Softmax層疊加而成。卷積神經(jīng)網(wǎng)絡(luò)中還有一個(gè)非常重要的結(jié)構(gòu):過濾器,它作用于層與層之間(卷積層與池化層),決定了怎樣對(duì)數(shù)據(jù)進(jìn)行卷積和池化
    2022-12-12
  • PyTorch中的squeeze()和unsqueeze()解析與應(yīng)用案例

    PyTorch中的squeeze()和unsqueeze()解析與應(yīng)用案例

    這篇文章主要介紹了PyTorch中的squeeze()和unsqueeze()解析與應(yīng)用案例,文章內(nèi)容介紹詳細(xì),需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2022-03-03
  • python list 查詢是否存在并且并返回下標(biāo)的操作

    python list 查詢是否存在并且并返回下標(biāo)的操作

    這篇文章主要介紹了python list 查詢是否存在并且并返回下標(biāo)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 利用Python如何畫一顆心、小人發(fā)射愛心

    利用Python如何畫一顆心、小人發(fā)射愛心

    這篇文章主要給大家介紹了關(guān)于利用Python如何畫一顆心、小人發(fā)射愛心的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python讀寫自定義格式的pcd文件的示例代碼

    python讀寫自定義格式的pcd文件的示例代碼

    這篇文章主要介紹了python讀寫自定義格式的pcd文件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07

最新評(píng)論

徐州市| 高台县| 昂仁县| 尉犁县| 珠海市| 千阳县| 宁化县| 明溪县| 石城县| 京山县| 荔波县| 内丘县| 北京市| 时尚| 北川| 克什克腾旗| 南皮县| 仙游县| 黎平县| 武陟县| 阿城市| 金寨县| 西畴县| 梧州市| 康乐县| 治县。| 边坝县| 鄂伦春自治旗| 万州区| 龙泉市| 嵊泗县| 二连浩特市| 清镇市| 百色市| 汉中市| 全椒县| 泾阳县| 米易县| 十堰市| 乃东县| 如皋市|