每日自动备份文件(自动备份怎么关闭)

每日自动备份文件(自动备份怎么关闭)

解决方案goocz2025-05-04 14:24:144A+A-

我有一些文件或目录比较重要,平时都是在有修改后手动复制进行备份 ,但当要备份的东西多了以后,总会比较烦,于是今天就借助AI编写了一个自动备份指定目录及文件到指定位置的程序,它实现以下功能:

  • 备份到什么地方由params.ini文件中的参数决定,文件中内容如下:
[DEFAULT]
base_dir=F:\bak\项目备份2
  • 要备份哪些目录或文件放到backup_dirs.txt中
G:\bak\程序\报价管理V1.0
G:\xx生产管理\生产管理系统源码
G:\xx生产管理\API设计文档.docx
G:\xx生产管理\SQL语句.docx
G:\mycode\ts_project\ts_vue
G:\mycode\ts_project\tsApiServer
  • 如果没有备份目录,则自动创建
  • 如果没有以当天日期为名的目录,则自动创建
  • 如果当天已备份过某目录或文件,则跳过
  • 如果当天没有备份过某目录或文件,则备份
  • 如果要备份的是文件,则备份名为“文件名+zip”
  • 如果要备份的是目录,则备份名为“目录名+zip”

通过配置文件,就可以不用改程序,可以方便指定要备份的文件和位置。


具体的python代码如下:

import os
import datetime
import zipfile
import configparser

def main():
    try:
        # 从ini中读取配置
        config = configparser.ConfigParser()
        config.read('params.ini',encoding='utf8')
        base_dir = config['DEFAULT']['base_dir']
        dirs_file = "backup_dirs.txt"  # 备份目录列表文件
    except Exception as e:
        print("读取params.ini文件出错!")
        return

    # 检查base_dir是否存在
    if not os.path.exists(base_dir):
        os.makedirs(base_dir)

    # 1. 检查日期目录是否存在
    date_str = datetime.datetime.now().strftime("%Y-%m-%d")
    date_dir = os.path.join(base_dir, date_str)

    # 2. 创建日期目录
    if not os.path.exists(date_dir):
        os.makedirs(date_dir)
        print(f"已创建目录:{date_dir}")

    # 3. 读取备份目录列表
    if not os.path.exists(dirs_file):
        print(f"错误:文件 {dirs_file} 不存在")
        return

    with open(dirs_file, 'r',encoding='utf8') as f:
        dirs_list = [line.strip() for line in f if line.strip()]

    if not dirs_list:
        print("备份目录列表为空")
        return

    # 4. 压缩每个目录
    for dir_path in dirs_list:
        if not os.path.exists(dir_path):
            print(f"警告:目录 {dir_path} 不存在,跳过")
            continue

        # 判断条目类型
        if os.path.isfile(dir_path):
            # 处理单个文件
            full_name = os.path.basename(dir_path)
            file_names = full_name.split(".")
            file_name = ".".join([file_names[i] for i in range(len(file_names)-1)])
            zip_name = f"{file_name}.zip"
            dest_path = os.path.join(date_dir, zip_name)

            if os.path.exists(dest_path):
                print(f"{dest_path}已存在,跳过!")
                continue

            try:
                print(f"正在压缩:{dir_path}")
                with zipfile.ZipFile(dest_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
                    # 将文件直接添加到压缩包根目录
                    zipf.write(dir_path, arcname=file_name)
                print(f"成功备份文件:{dir_path} -> {dest_path}")
            except Exception as e:
                print(f"压缩文件失败:{dir_path}(错误:{str(e)})")

        elif os.path.isdir(dir_path):
            # 生成ZIP文件名
            dir_name = os.path.basename(os.path.normpath(dir_path))
            zip_name = f"{dir_name}.zip"
            dest_path = os.path.join(date_dir, zip_name)

            if os.path.exists(dest_path):
                print(f"{dest_path}已存在,跳过!")
                continue

            try:
                print(f"正在压缩:{dir_path}")
                with zipfile.ZipFile(dest_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
                    # 遍历目录并添加文件
                    for root, dirs, files in os.walk(dir_path):
                        for file in files:
                            file_path = os.path.join(root, file)
                            # 计算相对路径(排除原始基目录)
                            arcname = os.path.relpath(file_path, dir_path)
                            zipf.write(file_path, arcname)
                print(f"成功备份:{dir_path} -> {dest_path}")
            except Exception as e:
                print(f"压缩失败:{dir_path}(错误:{str(e)})")
        else:
            print(f"跳过非文件/目录条目:{dir_path}")


if __name__ == "__main__":
    main()

如果备份的项目较多,还可以加入多线程备份的功能来使备份时间短一些。

如果要生成可执行文件,可以使用pyinstall来打包。

# 首先安装pyinstaller
pip install pyinstaller

# 然后进行打包(将所有内容打包为一个exe文件)
pyinstaller --onefile backupToZip.py



打包完成后,在当前py目录下会生成一个dist目录,下面会有一个backupToZip.exe文件,使用时将请这个文件与params.ini和backup_dirs.txt放在同一目录下即可。

如果要想每天一打开电脑就自动运行,可以按以下方式做:

  1. 为backupToZip.exe创建一个快捷方式。
  2. 按win+R弹出运行对话框,输入shell:startup,会打开一个启动目录
  3. 将第1步中的快捷方式移到第2步中的启动目录,以后每次启动电脑时就会自动运行程序,以实现每日自动备份。

python功能十分强大且易用,无论是否专业的程序员,都应该掌握这门语言,这会让平时的工作如虎添翼,尤其是在现在Ai的加持下显得更加的强大。

点击这里复制本文地址 以上内容由goocz整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

果子教程网 © All Rights Reserved.  蜀ICP备2024111239号-5