Script_DataBackup.py[linux系统文件夹备份]

# -*- coding: utf-8 -*-
"""
定时备份共享文件夹的脚本

只支持 linux


2002.05.20 潘叶舟
"""

import os
import re
import shutil
import datetime
from apscheduler.schedulers.blocking import BlockingScheduler


class Settings:
    """
    配置
    """
    username = 'xxxx'                           # 共享文件夹账号
    password = 'xxxx'                           # 共享文件夹密码
    host = '//192.168.0.xxx/share'              # 共享文件夹ip和地址
    # 需要拷贝的文件夹的绝对路径
    folder = r'/home/pyz/code/aaa'
    sudo_pass = 'xxxx'                          # 超级用户账号密码

    # 程序启动的时间
    # hour, minute = 19, 25  就是 17:25分启动程序
    hour, minute = 10, 38

    # day_of_week:(int | str)–工作日的编号或名称(0-6或周一,周二,周三,周四,周五,周六,周日)
    # hour, minute = 23, 30  day_of_week='5'  就是周六的23点30分启动程序
    day_of_week = '1'

    # 大于这个时间的备份文件将被删除
    # 2592000秒 = 30天
    # 1209600 = 14天
    # 604800 = 7天
    time_out = 1209600


class MongoDataBackup:

    """
    1.通过 "sudo mount -t cifs -o"命令 把共享文件夹挂载到本地
    2.使用shutil.copytree把挂载文件复制到本地
    3.按周期启动
    """

    def __init__(self):

        self.s = Settings                                                     # 加载配置
        self.mount_path = os.getcwd() + '/Mount'                              # 挂载路径
        self.server_path = self.s.folder                                      # 需要备份的文件夹绝对路径
        self.backup_path = self.mount_path + '/MongoDataBackup'               # 放数据备份文件的路径 linux
        self.date_now = datetime.datetime.now().strftime('%Y-%m-%d')          # 日期

        os.makedirs(self.mount_path, exist_ok=True)                           # 创建挂载路径
        os.makedirs(self.backup_path, exist_ok=True)                          # 创建备份路径

    def load_mount(self):
        """
        加载共享文件夹到本地
        """
        os.system('echo "{sudo_pass}" | sudo -S mount -t cifs -o username={username},'
                  'password={password} {host} {mount_path}'.format(
            sudo_pass=self.s.sudo_pass,
            username=self.s.username,
            password=self.s.password,
            host=self.s.host,
            mount_path=self.mount_path))

    def uninstall_mount(self):
        """
        卸载本地的共享文件夹
        """
        os.system('echo "{sudo_pass}" | sudo -S  umount {mount_path}'.
                  format(sudo_pass=self.s.sudo_pass,mount_path=self.mount_path))

    def copy_data(self):
        """
        复制文件
        """
        # 拼接备份的路径
        backup_path = self.backup_path + '/data' + self.date_now

        # 判断路径是否存在
        if not os.path.exists(backup_path):

            # 复制操作(模块)
            # shutil.copytree(self.server_path, backup_path)

            # 复制操作(命令)
            os.makedirs(backup_path, exist_ok=True)
            os.system('echo "{sudo_pass}" | sudo -S  cp -r {server_path} {backup_path}'.format(
                sudo_pass=self.s.sudo_pass, server_path=self.server_path, backup_path=backup_path))

        else:
            print('需要复制的文件夹已存在')

    def time_out_del(self):
        """
        删除一个月之前的备份文件
        """
        # 拿到备份目录下所有子目录
        for root, dirs, files in os.walk(self.backup_path):
            folder_path_list = [root + '/' + i for i in dirs]
            break

        # 循环判断目录的创建时间
        for folder_path in folder_path_list:
            # 现在的时间
            time_now = datetime.datetime.now()
            # 超时时间
            time_out = datetime.timedelta(seconds=self.s.time_out)
            # 文件夹创建时间
            time_folder = datetime.datetime.fromtimestamp(os.path.getmtime(folder_path))
            # 如果 现在的时间 - 文件夹创建时间 大于 超时时间 则删除该文件夹
            if (time_now - time_folder) > time_out:
                # 验证路径是否正确 以免误删
                verification_1 = re.findall(r'data\d\d\d\d-\d\d-\d\d', folder_path)
                verification_2 = re.findall('MongoDataBackup', folder_path)
                if verification_1 and verification_2:
                    shutil.rmtree(folder_path)
                else:
                    print('路径有误!!!如需清理请手动删除', folder_path)


def program_start_now():
    """
    马上启动程序
    """
    m = MongoDataBackup()
    m.load_mount()                  # 挂载共享文件夹
    print('文件备份中...')
    m.copy_data()                   # 复制文件
    print('备份完成: ', datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    m.time_out_del()                # 删除一个月之前的文件夹
    m.uninstall_mount()             # 卸载挂载


def program_start_timing():
    """
    定时计划任务
    day_of_week(int | str)–工作日的编号或名称(0-6或周一,周二,周三,周四,周五,周六,周日)
    day_of_week='0-4' 就是一到周五
    hour 小时
    minute 分钟
    """
    print('已开启备份程序...')
    scheduler = BlockingScheduler()
    s = Settings
    scheduler.add_job(program_start_now, 'cron', day_of_week=s.day_of_week, hour=s.hour, minute=s.minute)
    scheduler.start()


if __name__ == "__main__":
    program_start_now()                # 现在启动
    # program_start_timing()             # 定时启动

展开阅读全文

Python数据分析与挖掘

01-08
92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元   为什么学习数据分析?       人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。       从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。    本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。   二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。   三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。   四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。   五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。
©️2020 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值