【Python】自动备份脚本

本文介绍了一款Python脚本,用于自动备份指定后缀的文件到本地备份文件夹,并与阿里云盘保持同步。脚本具备文件哈希检查功能,避免不必要的上传,同时支持定时运行和排除特定文件夹。通过配置文件管理参数,实现灵活的备份策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

一、前言

之前因为疫情常常不知道会不会被封在家里,又不想把电脑带过来带过去,就做了这个自动备份的脚本。

功能如下:

  1. 自动从指定根目录里将找到的所有指定后缀名的文件备份到一个备份文件夹里;备份文件架确保和根目录完全一致,即同步更新也同步删除
  2. 将备份文件夹中的文件自动和阿里云盘同步,同样完全一致,同步更新/删除;
  3. 原文件目录结构不会改变;
  4. 可以屏蔽根目录下一级中不想要的文件夹/文件,下多级的不行;
  5. 定时运行;
  6. 初版很傻,每天都会带着所有文件去访问云盘,导致调用api次数太多频繁被墙,大大降低脚本运行效率,现在已改成若文件哈希值没变则直接跳过

二、代码

创建了一个AutoTransfer类,这个类在初始化的时候会自动读取配置文件里的参数,如果没有配置文件也可以后续调用函数时来传参。

调用类里的move_scripts函数可以将指定后缀名的文件备份到备份文件夹里。

调用ali_login函数登录阿里云。

调用find_id函数可以根据阿里云盘里的文件夹名查找文件夹id,这个id后面要用。

调用sync_folder函数进行同步,file_id就是上面的文件夹id,flag表示同步方式,True代表以本地为主。

#!/usr/bin/env python
# coding: utf-8


import os
import sys
import json
import fnmatch
import filecmp
from typing import List, Dict, Union, Callable, Optional
from shutil import copyfile, rmtree
from functools import reduce
from pathlib import Path

from tqdm import tqdm
from aligo import Aligo


class AutoTransfer:
    def __init__(self, config_file='transfer_config.json'):
        self.config_file = config_file
        # 自动从配置json里获取参数
        if os.path.exists(config_file):
            with open(config_file, mode='r', encoding='utf-8') as c:
                cfg = json.load(c)
            for k, v in cfg.items():
                setattr(self, k, v)

    def __setattr__(self, k, v):
        if '_' != k[0]:
            print(f"Current attribute '{
     
     k}' is '{
     
     v}'")
        self.__dict__[k] = v

    @staticmethod
    def list_dir(
            cur_path: str,
            ext_filter: Optional[List] = None
    ) -> List:
        """
        列举文件根目录下各文件的路径.
        Parameters
        ----------
        cur_path: str
            根目录.
        ext_filter: Optional[List], default None
            用作筛选的后缀名.

        Returns
        -------
        List
            文件路径列表.
        """
        file_paths = []
        for root, dirs, files in os.walk(cur_path):
            for file in files:
                file_paths.append(os.path.join(root, file)<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sprite.Nym

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值