Python文件夹自动同步备份核心是精准增量:用filecmp.cmp()逐字节比对内容,pathlib管理跨平台路径,shutil.copy2()保留元数据,配合日志、异常处理和磁盘空间检查确保健壮性。
用Python实现文件夹自动同步备份,核心是比对源与目标的文件差异,只复制新增或修改过的文件,跳过未变动的——这样省时间、少占空间。关键不在“全量拷贝”,而在“精准增量”。
别只看文件名或修改时间,有些程序会重写文件但内容没变(比如某些编辑器保存行为)。filecmp.cmp() 能逐字节比对,更可靠;配合 shutil.copy2() 还能保留原文件的时间戳和权限。
os.walk() 获取相对路径结构filecmp.cmp(src, dst, shallow=False) 判定内容是否一致避免手动拼接 "\\" 或 "/",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)
没人盯着控制台时,出错要留痕,跳过问题文件也不能中断整个流程。
logging.basicConfig(filename="backup.log", level=logging.INFO) 记录每次操作shutil.disk_usage(DST.parent).free > needed_bytes
PermissionError、FileNotFoundError 单独捕获并记录,继续下一项Python 脚本本身不负责“定时”,交给操作系统更稳。Windows 用任务计划程序,macOS/Linux 用 cron,每小时执行一次 python backup.py 即可。
if __name__ == "__main__": run_backup(),保持可导入性--init 参数,做一次全量初始化,后续默认走增量逻辑基本上就这些。不复杂但容易忽略的是:比对逻辑要严谨、路径处理要健壮、异常不能静默吞掉。写完跑两遍,对比日志和实际文件,基本就稳了。