Python文件夹自动同步备份核心是精准增量:用filecmp.cmp()逐字节比对内容,pathlib管理跨平台路径,shutil.copy2()保留元数据,配合日志、异常处理和磁盘空间检查确保健壮性。

用Python实现文件夹自动同步备份,核心是比对源与目标的文件差异,只复制新增或修改过的文件,跳过未变动的——这样省时间、少占空间。关键不在“全量拷贝”,而在“精准增量”。
用 filecmp 快速识别文件是否真正变化
别只看文件名或修改时间,有些程序会重写文件但内容没变(比如某些编辑器保存行为)。filecmp.cmp() 能逐字节比对,更可靠;配合 shutil.copy2() 还能保留原文件的时间戳和权限。
- 先遍历源目录所有文件路径,用
os.walk()获取相对路径结构 - 对每个文件,拼出目标端对应路径,检查目标是否存在
- 若目标不存在 → 直接复制;若存在 → 用
filecmp.cmp(src, dst, shallow=False)判定内容是否一致 - 不一致才覆盖,一致则跳过
用 pathlib 管理路径,干净又跨平台
避免手动拼接 "\\" 或 "/",pathlib.Path 自动适配系统。比如 src / "docs" / "report.pdf" 在 Windows 和 macOS 下都正确。
- 定义
SRC = Path("D:/my_project")和DST = Path("//nas/backup/project") - 遍历时用
file.relative_to(SRC)得到相对路径,再用DST / rel_path构建目标位置 - 创建目标父目录时,直接
(DST / rel_path).parent.mkdir(parents=True, exist_ok=True)
加一层日志和异常防护,脚本才敢放后台跑
没人盯着控制台时,出错要留痕,跳过问题文件也不能中断整个流程。
立即学习“Python免费学习笔记(深入)”;
- 用
logging.basicConfig(filename="backup.log", level=logging.INFO)记录每次操作 - 复制前检查磁盘空间:
shutil.disk_usage(DST.parent).free > needed_bytes - 对
PermissionError、FileNotFoundError单独捕获并记录,继续下一项 - 最后统计“成功同步 X 个,跳过 Y 个,失败 Z 个”,写入日志末尾
定时触发建议:系统计划任务 + 精简主逻辑
Python 脚本本身不负责“定时”,交给操作系统更稳。Windows 用任务计划程序,macOS/Linux 用 cron,每小时执行一次 python backup.py 即可。
- 脚本开头加
if __name__ == "__main__": run_backup(),保持可导入性 - 把源/目标路径、日志路径等抽成配置变量或读取 JSON 配置文件,方便多环境复用
- 首次运行建议加
--init参数,做一次全量初始化,后续默认走增量逻辑
基本上就这些。不复杂但容易忽略的是:比对逻辑要严谨、路径处理要健壮、异常不能静默吞掉。写完跑两遍,对比日志和实际文件,基本就稳了。










