python实现定时自动备份文件到其他主机的实例代码


Posted in Python onFebruary 23, 2018

定时将源文件或目录使用WinRAR压缩并自动备份到本地或网络上的主机

1.确保WinRAR安装在默认路径或者把WinRAR.exe添加到环境变量中

2.在代码里的sources填写备份的文件或目录,target_dir填写备份目的目录

3.delete_source_file为备份完后是否删除源文件(不删除子文件夹)

4.备份成功/失败后生成备份日志

按照格式,填写源目的:

sources = [r'E:\目录1', r'E:\目录2\b.txt'] #例:= [ r'E:\test\1234.txt', r'E:\test1']
target_dir = r'\\10.1.5.227\共享\备份'   #例:= r'D:\备份' 或 = r'\\10.1.5.227\共享目录'
delete_source_file = False        #False/True

手动运行三次,已经有两个备份zip了

python实现定时自动备份文件到其他主机的实例代码

打开log查看为什么少了一个

python实现定时自动备份文件到其他主机的实例代码

可以看到目录1备份失败了,细看发现,目录1下的a.txt没有权限(读取),是因为用户对该文件没有权限。

如果该目录或者子目录下有一个没有权限,会导致整个目录都不能备份, 日志看到a.txt没有权限.

第二次备份的时候将源文件删除后,第三次备份就没有文件备份了

接下来将脚本程序添加到win的计划任务里,就能实现定时自动备份辣<( ̄︶ ̄)>

python实现定时自动备份文件到其他主机的实例代码

把代码文件添加进来,同时也可以在这里添加参数-d, 指明备份完后删除源文件

python实现定时自动备份文件到其他主机的实例代码

完整代码

python3.0

# -*- coding=utf-8 -*-
#进行了一场py/etherchannel
import os, sys
import time
import logging
sources = [r'E:\视频笔记', r'E:\目录\b.txt'] #例:= [ r'E:\test\1234.txt', r'E:\test1']
target_dir = r'\\10.1.5.227\共享\备份'    #例:= r'D:\备份' 或 = r'\\10.1.5.227\共享目录'
delete_source_file = False         #False/True
def Init_Logging(path):
  logging.basicConfig(level=logging.INFO, 
    format='%(asctime)s %(levelname)-8s %(message)s',  
    filename=path + '\\' + 'log.txt', 
    filemode='a',
    datefmt='%Y-%m-%d %X')
def Ctypes(message, title):
  import ctypes
  ctypes.windll.user32.MessageBoxA(0,message.encode('gb2312'), \
  title.encode('gb2312'),0)
  sys.exit()
def Check_Dir_Permit(dirs, dirc_permit=True, root=''):
  for dirc in dirs:
    dirc = os.path.join(root,dirc)
    try:
      os.chdir(dirc)
    except IOError as e:
      logging.error("找不到指定文件或没有权限 >>> " + str(e))
      dirc_permit = False
  return dirc_permit
def Create_Directory(dir):
  if not os.path.exists(dir):
    try:
      os.mkdir(dir)
      print('Successfully created directory',dir)
    except IOError as e:
      Ctypes(u"target_dir 目录路径不存在 ", u' 错误')
  assert Check_Dir_Permit([dir]), Ctypes(u"target_dir 没有权限 ", u' 错误')
  return dir
def Check_File_Permit(files, file_permit=True, root=''):
  for filename in files:
    file = os.path.join(root,filename)
    try:
      f = open(file)
      f.close()
    except IOError as e:
      logging.error("找不到指定文件或没有权限 >>> " + str(e))
      file_permit = False
  return file_permit
def Permit_Source(sources):
  allow_sources = []
  disallow_sources = []
  for source in sources:
    file_permit = True
    dirc_permit = True
    for (root, dirs, files) in os.walk(source):
      file_permit = Check_File_Permit(files, file_permit,root=root)
      dirc_permit = Check_Dir_Permit(dirs, dirc_permit,root=root)
    if os.path.isdir(source) and file_permit and dirc_permit or \
      os.path.isfile(source) and Check_File_Permit([source], file_permit):
      allow_sources.append(source)
    else:
      disallow_sources.append(source)
  return (allow_sources,disallow_sources)
def Delete_Files(allow_sources):
  for source in allow_sources:
    if os.path.isdir(source):
      command = 'del /a/s/f/q ' + source  #/s:也把子文件夹的文件一并删除
      if os.system(command) == 0:
        logging.info('del: ' + str(source))
      else:
        logging.error(str(source) + ' 删除失败')
    else:
      command = 'del /a/f/q ' + source
      if os.system(command) == 0:
        logging.info('del: ' + str(source))
      else:
        logging.error(str(source) + ' 删除失败')
def Compress_Backup(target, source):
  target = target + '\\' + time.strftime('%Y%m%d%H%M%S') + '.rar'
  if os.path.exists(r"C:\Program Files (x86)\WinRAR\WinRAR.exe"):
    rar_command = r'"C:\Program Files (x86)\WinRAR\WinRAR.exe" A %s %s' % (target,' '.join(source)) #WinRAR.exe" A %s %s -r'加上-r是作用到子文件夹中同名的文件
  else:
    rar_command = 'WinRAR' + ' A %s %s' % (target,' '.join(source))
  if os.system(rar_command) == 0: 
    print('Successful backup to', target)
    logging.info(str(source) + ' 备份到 ' + str(target) + ' 成功')
    try:
      if delete_source_file or sys.argv[1] == '-d':
        Delete_Files(source)
    except IndexError:
      pass
  else:
    logging.error("备份失败:WinRAR出错,确认路径 或 压缩被中断")
    Ctypes(u"备份失败:WinRAR出错,确认路径 或 压缩被中断", u' 错误')
if __name__ == '__main__':
  target_dir = Create_Directory(target_dir)
  Init_Logging(target_dir)
  logging.info('=' * 80)
  allow_sources, disallow_sources = Permit_Source(sources)
  if allow_sources:
    Compress_Backup(target_dir, allow_sources)
  if disallow_sources:
    print(disallow_sources, ' 备份失败')
    logging.error(str(disallow_sources) + ' 备份失败')

总结

以上所述是小编给大家介绍的python实现定时自动备份文件到其他主机的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
pandas使用get_dummies进行one-hot编码的方法
Jul 10 Python
python如何发布自已pip项目的方法步骤
Oct 09 Python
set在python里的含义和用法
Jun 24 Python
python实现生成Word、docx文件的方法分析
Aug 30 Python
python multiprocessing多进程变量共享与加锁的实现
Oct 02 Python
使用 Python 清理收藏夹里已失效的网站
Dec 03 Python
浅谈Python中文件夹和python package包的区别
Jun 01 Python
终于搞懂了Keras中multiloss的对应关系介绍
Jun 22 Python
Python 解析简单的XML数据
Jul 24 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
Oct 30 Python
Jupyter安装链接aconda实现过程图解
Nov 02 Python
利用python做表格数据处理
Apr 13 Python
Python机器学习算法之k均值聚类(k-means)
Feb 23 #Python
python3调用R的示例代码
Feb 23 #Python
python中kmeans聚类实现代码
Feb 23 #Python
python实现SOM算法
Feb 23 #Python
python实现k-means聚类算法
Feb 23 #Python
python写一个md5解密器示例
Feb 23 #Python
Python机器学习之K-Means聚类实现详解
Feb 22 #Python
You might like
MySQL授权问题总结
2007/05/06 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
php7 错误处理机制修改实例分析
2020/05/25 PHP
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
获取鼠标在div中的相对位置的实现代码
2013/12/30 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
微信小程序 火车票查询实例讲解
2016/10/17 Javascript
学习Node.js模块机制
2016/10/17 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
2018/06/29 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
基于JavaScript获取base64图片大小
2019/10/18 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
vue全屏事件开发详解
2020/06/17 Javascript
netbeans7安装python插件的方法图解
2013/12/24 Python
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
Python爬虫抓取指定网页图片代码实例
2020/07/24 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
基层党建工作汇报材料
2014/08/15 职场文书
个人先进事迹材料
2014/12/29 职场文书
公司副总经理岗位职责
2015/04/08 职场文书
三八节活动简报
2015/07/20 职场文书
创业计划书之服装
2019/10/07 职场文书
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP
Vue3中的Refs和Ref详情
2021/11/11 Vue.js
Python 装饰器(decorator)常用的创建方式及解析
2022/04/24 Python
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python
python如何读取和存储dict()与.json格式文件
2022/06/25 Python