手动处理图片链接太痛苦了,每次都要下载、上传、替换链接,步骤多还容易出错。写个脚本让它全自动,一劳永逸。

问题

博客图片管理一直是个麻烦事:

  • 从微信公众号转载文章,图片都是外链
  • 外链不稳定,说不定哪天就挂了
  • 想迁移图床,手动改链接太繁琐
  • 一不小心就忘了某个步骤,图片上传了链接没更新

原理

其实就三步:

  1. 下载:扫描 Markdown 文件,找到所有外部图片,下载到本地
  2. 上传:把本地图片通过 PicGo 上传到图床
  3. 替换:更新 Markdown 中的图片链接

核心是用正则提取图片引用 ![](url),然后做 URL 映射替换。

加上缓存机制(基于文件 hash),避免重复上传。再加个备份功能,出问题能回滚。

实现

写了三个脚本:

1. auto_migrate.py - 一键式

最常用,自动完成所有步骤:

1
2
python3 scripts/auto_migrate.py --dry-run  # 预览
python3 scripts/auto_migrate.py            # 正式执行

运行前会提醒检查 PicGo 配置,避免上传到错误图床。

2. fix_current_links.py - 修复

如果图片已上传但链接没更新,用这个:

1
python3 scripts/fix_current_links.py --yes

从缓存文件 .image_cache.json 读取映射关系,批量更新链接。

3. blog_image_manager.py - 手动模式

需要精细控制时用,可以单独执行下载或上传。

使用

最简单就两步:

1
2
3
4
5
# 1. 预览(首次推荐)
python3 scripts/auto_migrate.py --dry-run

# 2. 正式执行
python3 scripts/auto_migrate.py

出问题可以回滚:

1
python3 scripts/auto_migrate.py --rollback

备份保存在 ~/.blog_image_backups/

代码

脚本在我博客的 GitHub 仓库:blog/scripts at main · Coco422/blog · GitHub

主要模块:

  • auto_migrate.py - 一键自动化
  • fix_current_links.py - 修复链接
  • markdown_processor.py - Markdown 解析和替换
  • image_uploader.py - PicGo 上传
  • image_downloader.py - 图片下载
  • cache_manager.py - 缓存管理

效果

无需多说

总结

懒逼推动世界进步

写脚本的时间成本远低于每次手动处理的累积成本。

代码不多,核心就是文件操作 + API 调用 + 字符串替换。遇到类似需求可以参考改改。