答案是用Python脚本实现照片库增量同步:只传输新增或变更文件、跳过哈希一致项、保持目录结构、支持中断续传,兼容macOS/Windows/Linux,无需第三方工具。
用脚本自动化同步照片库到外部驱动器,核心是只传新增或变更的文件、跳过重复项、保持目录结构、支持中断续传。不靠手动拖拽,也不依赖第三方同步软件,几行代码就能稳定运行。
识别并挂载外部驱动器路径
脚本执行前必须确认外部硬盘已正确连接并被系统识别:
-
macOS:通常挂载在
/Volumes/你的硬盘名,可用ls /Volumes查看;若含空格或中文,路径需用引号包裹(如"/Volumes/Photo Backup") -
Windows:检查资源管理器中分配的盘符(如
E:\或F:\),确保该盘符稳定(避免使用可移动设备默认分配的临时盘符) -
Linux:常用挂载点为
/media/用户名/硬盘名或/mnt/xxx,可用df -h | grep -i disk快速定位
按需选择同步策略:复制 vs 移动 vs 增量更新
多数备份场景推荐「增量复制」——保留源库不变,目标端始终是完整镜像:
- 用
shutil.copy2()复制文件,保留修改时间、权限等元数据 - 通过文件哈希(如 SHA-256)比对内容,而非仅看文件名或时间戳,避免因时区/系统时间误差导致误同步
- 跳过目标已存在且哈希一致的文件,大幅节省时间和带宽
- 支持排除临时文件(如
.DS_Store、Thumbs.db)、隐藏文件夹或特定格式(如 RAW 文件暂不同步)
一个轻量可靠的同步脚本示例
以下 Python 脚本适用于 macOS 和 Windows,无需额外安装包(仅用标准库):
import os
import shutil
import hashlib
<p>def file_hash(path):
h = hashlib.sha256()
with open(path, "rb") as f:
while chunk := f.read(8192):
h.update(chunk)
return h.hexdigest()</p><p>def sync_photos(src, dst, exclude=('.DS<em>Store', '.</em>*', '.git')):
os.makedirs(dst, exist_ok=True)
for root, dirs, files in os.walk(src):</p><h1>过滤掉要排除的目录(如 .photoslibrary 的私有子目录)</h1><pre class="brush:php;toolbar:false;"> dirs[:] = [d for d in dirs if not any(d.startswith(e.strip('*')) for e in exclude)]
for f in files:
if any(f.startswith(e.strip('*')) or f.endswith(e.strip('*')) for e in exclude):
continue
src_file = os.path.join(root, f)
rel_path = os.path.relpath(src_file, src)
dst_file = os.path.join(dst, rel_path)
os.makedirs(os.path.dirname(dst_file), exist_ok=True)
if not os.path.exists(dst_file) or file_hash(src_file) != file_hash(dst_file):
shutil.copy2(src_file, dst_file)
print(f"✓ {rel_path}")使用示例(替换为你的真实路径)
sync_photos( src="/Users/you/Pictures/Photos Library.photoslibrary", dst="/Volumes/Photo Backup/Photos Library Backup" )
注意:Photos 库本质是包裹式文件包,直接同步整个 .photoslibrary 文件夹即可(macOS 下它是个文件夹,不是普通文件)。无需解包或导出——这是最安全、最完整的备份方式。
提升可靠性的实用建议
真正落地时,几个细节决定成败:
- 把脚本保存为
backup_photos.py,用python3 backup_photos.py手动运行;进阶可配合launchd(macOS)或任务计划程序(Windows)定时触发 - 首次全量同步耗时较长,建议接稳电源、禁用休眠,并在终端运行时观察输出;后续增量同步通常几秒内完成
- 同步完成后,可在目标盘根目录生成一个
backup_timestamp.txt记录时间,方便回溯 - 不要用 Finder 或资源管理器直接修改目标盘里的照片库——所有操作应通过原 Photos 应用或
osxphotos工具进行,避免损坏数据库一致性
不复杂但容易忽略。











