Python 自动备份脚本的示例代码

2022-12-26 66阅读 0评论

?=一、前言

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

功能如下:

自动指定根目录里将找到的所有指定后缀名文件备份到一个备份文件夹里;将备份文件夹中的文件自动和阿里云盘同步;原文件目录结构不会改变;可以屏蔽根目录下一级中不想要的文件夹/文件,下多级的不行;定时运行

二、代码

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

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

调用ali_login函数登录阿里云。

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

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

import os import JSon from tqdm import tqdm from shutil import Copy 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): print(f"Current attribute '{k}' is '{v}'") self.__dict__[k] = v  def move_scripts(self, org_root='', new_root='', blocks=[], exts=[]): # 更新参数 if org_root: self.org_root = org_root if new_root: self.new_root = new_root if blocks: self.blocks = blocks if exts: self.exts = exts  # 检查参数有无缺少 missing_attr = [attr for attr in ['org_root', 'new_root', 'exts'] if attr not in self.__dict__.keys()] if missing_attr: raise AttributeError  folders = os.listdir(self.org_root) backup_folders = [os.path.join(self.org_root, fd) for fd in folders if fd not in self.blocks] for fdr in tqdm(backup_folders): cur_files = self.list_dir(fdr) for f in cur_files: if os.path.splitext(f)[-1] in self.exts: total_path = f.replace(self.org_root, self.new_root) new_folder, f_name = os.path.split(total_path) if not os.path.exists(new_folder): os.makedirs(new_folder) copy(f, total_path)  self.remember_configs()  @staticmethod def list_dir(cur_path: str): """ 列举文件根目录下各文件路径的函数。 :param cur_path: 根目录。 :return: 根目录下所有子目录里的所有文件。 """ file_paths = [] for root, dirs, files in os.walk(cur_path): for file in files: file_paths.append(os.path.join(root, file)) return file_paths  def ali_login(self): self.aligo = Aligo()  def find_id(self, tarGet_name): for f in self.aligo.get_file_list(): if f.name == target_name: return f.file_id  def sync_folder(self, file_id='', flag=None): if file_id: self.file_id = file_id if flag: self.flag = flag self.remember_configs() self.aligo.sync_folder(self.new_root, self.file_id, self.flag)  def remember_configs(self): config_dict = {k: v for k, v in self.__dict__.items() if    k in ['org_root', 'new_root', 'blocks', 'exts', 'file_id', 'flag']} with open(self.config_file, mode='w', encoding='utf-8') as f: json.dump(config_dict, f)  if __name__ == '__main__': at = AutoTransfer() at.move_scripts() # print(at.find_id('BF_projects')) at.ali_login() at.sync_folder() 

接下来创建一个.bat文件:

@echo off  D:  cd 脚本路径  start Python 脚本文件名.py  exit

最后创建定时任务即可:

Python 自动备份脚本的示例代码

如果想每天看着它运行,记得勾选“只在用户登录时运行”。

Python 自动备份脚本的示例代码

到此这篇关于python 自动备份脚本的文章就介绍到这了,更多相关Python 自动备份脚本内容请搜索云初冀北以前的文章或继续浏览下面的相关文章希望大家以后多多支持云初冀北!

免责声明
本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:goliszhou@gmail.com
$

发表评论

表情:
评论列表 (暂无评论,66人围观)

还没有评论,来说两句吧...