功能说明:

这个 Python 程序旨在帮助用户自动化备份指定文件夹中的内容。用户可以设置定时任务,让程序定期(例如每天、每周等)将目标文件夹中的所有文件和子文件夹备份到指定的备份目录,并以日期和时间为文件夹名进行归档。通过这种方式,用户可以轻松管理文件的备份版本,并避免因手动备份失误导致数据丢失。

程序功能的亮点包括:

  • 定期备份指定目录。
  • 自动创建备份版本目录,并按照日期和时间命名。
  • 支持对文件夹和文件的递归复制(包括子目录和文件)。
  • 日志记录备份过程。
  • 支持命令行参数配置(如备份路径、时间间隔等)。

代码:

import os
import shutil
import time
from datetime import datetime
import logging

# 配置日志
logging.basicConfig(filename='backup.log', level=logging.INFO,
                    format='%(asctime)s - %(levelname)s - %(message)s')

# 配置常量
SOURCE_DIR = "source"         # 需要备份的源文件夹
BACKUP_DIR = "backups"       # 备份存放目录
BACKUP_INTERVAL = 3600       # 备份间隔,单位为秒,默认为 3600 秒(即每小时备份一次)

# 获取当前时间,用于创建备份目录
def get_current_time():
    return datetime.now().strftime('%Y-%m-%d_%H-%M-%S')

# 创建备份文件夹
def create_backup_directory():
    current_time = get_current_time()
    backup_folder = os.path.join(BACKUP_DIR, f"backup_{current_time}")
    os.makedirs(backup_folder, exist_ok=True)
    return backup_folder

# 复制文件夹及其内容
def copy_files(source, destination):
    try:
        if os.path.isdir(source):
            shutil.copytree(source, destination)
            logging.info(f"成功备份文件夹: {source} 到 {destination}")
        elif os.path.isfile(source):
            shutil.copy2(source, destination)
            logging.info(f"成功备份文件: {source} 到 {destination}")
        else:
            logging.warning(f"{source} 不是有效的文件或文件夹")
    except Exception as e:
        logging.error(f"备份失败: {source} -> {destination},错误: {e}")

# 执行备份操作
def perform_backup():
    if not os.path.exists(SOURCE_DIR):
        logging.error(f"源文件夹 {SOURCE_DIR} 不存在!")
        return

    # 创建新的备份目录
    backup_folder = create_backup_directory()

    # 执行文件夹内容备份
    copy_files(SOURCE_DIR, backup_folder)

# 定时备份
def scheduled_backup():
    logging.info("定时备份程序启动...")
    while True:
        perform_backup()  # 执行备份
        logging.info(f"等待 {BACKUP_INTERVAL} 秒后进行下一次备份...")
        time.sleep(BACKUP_INTERVAL)  # 等待指定的时间间隔后再进行下一次备份

# 主程序
def main():
    scheduled_backup()

# 执行主程序
if __name__ == "__main__":
    main()

使用说明:

  1. 安装要求:

    • Python 3.x 环境。
    • 程序使用了 Python 内置的 osshutiltimelogging 模块,无需安装额外的第三方库。
  2. 程序运行:

    • 将代码保存为 auto_backup.py
    • 在终端(命令行)中运行该程序:

      python auto_backup.py
  3. 配置项说明:

    • SOURCE_DIR:指定需要定期备份的源文件夹路径。例如 source 目录。
    • BACKUP_DIR:指定备份文件存放的目标目录。备份将会存放在该目录下,并根据日期和时间生成子目录。
    • BACKUP_INTERVAL:指定备份的时间间隔(单位:秒)。默认值为 3600 秒,即每小时备份一次。可以根据需要修改为不同的时间间隔。例如,BACKUP_INTERVAL = 86400 表示每天备份一次。
  4. 运行效果:

    • 程序会定期备份 SOURCE_DIR 目录下的所有文件和子文件夹,并将备份存放在 BACKUP_DIR 目录下。备份的文件夹会以时间戳命名,例如 backup_2025-04-15_13-30-00
    • 每次备份完成后,程序会等待指定的时间间隔,然后自动进行下一次备份。
  5. 日志文件:

    • 程序会将备份操作的详细信息记录在 backup.log 文件中,包括每次备份的时间、备份的文件夹路径以及任何发生的错误。日志记录格式如下:

      2025-04-15 13:30:00 - INFO - 成功备份文件夹: source 到 backups/backup_2025-04-15_13-30-00
      2025-04-15 13:30:10 - INFO - 等待 3600 秒后进行下一次备份...
  6. 如何停止程序:

    • 如果您希望停止备份操作,可以通过终端中的 Ctrl + C 来中断程序执行。
  7. 备份过程解释:

    • 每次备份时,程序首先检查 SOURCE_DIR 是否存在。如果存在,程序将创建一个以当前时间为名字的备份文件夹,并将 SOURCE_DIR 中的所有文件和子文件夹复制到备份目录中。
    • 在备份过程中,程序会记录每个操作,并在 backup.log 文件中详细记录成功和失败的备份操作。
    • 程序会根据 BACKUP_INTERVAL 的值,定期执行备份,直到程序被手动终止。
  8. 扩展功能:

    • 邮件通知:可以通过配置邮件通知,将备份操作的结果通过邮件发送给用户,便于远程监控备份状态。
    • 云备份:程序可以扩展为支持将备份上传到云存储服务(如 AWS S3、Google Drive)中,确保备份数据的安全性。
    • 文件排除:用户可以选择排除某些不需要备份的文件或文件夹(如临时文件夹、日志文件等),使备份更加精简。

小结:

这个定时备份工具使用 Python 实现了自动化备份指定目录的功能,支持定时定期执行备份,并通过时间戳对每个备份版本进行归档。用户可以方便地管理备份文件,避免丢失重要数据。程序还提供了日志记录功能,可以帮助用户追踪备份的状态。


1 声望2 粉丝