尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Emacs自定义插件进行笔记本地备份和RClone远程同步(KIMI)

Emacs自定义插件进行笔记本地备份和RClone远程同步(KIMI)
📅 发布时间:2026/6/18 11:42:42

Emacs自定义插件进行笔记本地备份和RClone远程同步(KIMI)

为了能够在Emacs记笔记的时候能够同步和备份笔记,我用如下Emacs自定义插件实现这个功能。备份功能将笔记备份到本地指定目录的压缩包,同步功能将笔记和远程的对象存储进行同步,可以单向也可以双向同步。

title: Emacs自定义插件进行笔记本地备份和RClone远程同步(KIMI)

为了能够在Emacs记笔记的时候能够同步和备份笔记,我用如下Emacs自定义插件实现这个
功能。备份功能将笔记备份到本地指定目录的压缩包,同步功能将笔记和远程的对象存储
进行同步,可以单向也可以双向同步。

需要提前安装和配置RClone远程存储。双向同步会删除文件,所以要及时备份。

自动同步和启动、退出时候的同步是从思源笔记中学到的,甚至对象存储进行远程数据保
存和同步的方法也是从思源笔记中学习到的。

自己电脑上的Emacs配置文件和目录也放在笔记目录中,把Emacs自己读取的文件设置为软
链接。

这份代码放到~/.emacs.d/lisp/backup-sync.el中,在~/.emacs中加载即可。目前没
有考虑更高级的功能,比如支持多个数据源的备份和同步,仅满足自己的功能即可。


Kimi: 这段代码是一个用于备份和同步笔记的 Emacs 插件,主要功能是通过 rclone
和 tar 命令来实现本地文件夹的备份和与远程文件夹的同步。以下是对代码的详细分
析和解释:

1. 加载依赖

(require 'cl-lib)
(require 'timer)
  • cl-lib:加载 Common Lisp 扩展库,提供一些额外的函数和宏。
  • timer:加载定时器功能,用于实现自动同步功能。

2. 定义自定义组

(defgroup backup-sync nil"使用 rclone 和 tar 备份和同步文件。":group 'tools)
  • 定义了一个自定义组 backup-sync,用于组织与备份同步相关的自定义变量和函数。
    这有助于在 Emacs 的自定义界面中更好地管理这些设置。

3. 定义自定义变量

(defcustom backup-sync-source-folder "/path/to/source/folder""要备份和同步的源文件夹路径。":type 'string:group 'backup-sync)
  • 定义了一个自定义变量 backup-sync-source-folder,用于指定要备份和同步的源文
    件夹路径。
  • 类似地,定义了其他自定义变量,包括备份文件夹路径、远程文件夹路径、保留的备份
    文件数量、自动同步的启用状态、自动同步的间隔时间、启动时同步和退出时同步的启
    用状态。

4. 生成时间戳

(defun backup-sync-timestamp ()"生成时间戳字符串。"(format-time-string "%Y%m%d%H%M%S"))
  • 定义了一个函数 backup-sync-timestamp,用于生成时间戳字符串,格式为
    YYYYMMDDHHMMSS,用于备份文件的命名。

5. 备份源文件夹

(defun backup-sync-backup ()"将源文件夹备份到备份文件夹。"(interactive)(let* ((timestamp (backup-sync-timestamp))(backup-file (expand-file-name (concat "backup-" timestamp ".tar.gz") backup-sync-backup-folder)))(make-directory backup-sync-backup-folder t)(message "开始备份到 %s..." backup-file)(shell-command (format "tar -czf %s -C %s ." backup-file backup-sync-source-folder))(message "备份完成: %s" backup-file)(backup-sync-clean-old-backups)))
  • 定义了一个函数 backup-sync-backup,用于将源文件夹备份到备份文件夹。
  • 使用 tar 命令将源文件夹压缩成 .tar.gz 文件,并存储在指定的备份文件夹中。
  • 调用了 backup-sync-clean-old-backups 函数来清理旧备份。

6. 清理旧备份

(defun backup-sync-clean-old-backups ()"清理旧备份,只保留指定数量的最新备份。"(interactive)(let* ((backup-files (directory-files backup-sync-backup-folder t "backup-.*\\.tar\\.gz$"))(sorted-backup-files (sort backup-files (lambda (a b) (string> a b))))(backups-to-delete (nthcdr backup-sync-keep-backups sorted-backup-files)))(dolist (file backups-to-delete)(delete-file file)(message "已删除旧备份: %s" file))))
  • 定义了一个函数 backup-sync-clean-old-backups,用于清理旧备份。
  • 获取所有备份文件,按时间排序,删除超出保留数量的旧备份。

7. 同步本地到远程

(defun backup-sync-sync-local-to-remote ()"使用 rclone 将源文件夹同步到远程文件夹。"(interactive)(message "正在同步本地到远程...")(shell-command (format "rclone sync %s %s" backup-sync-source-folder backup-sync-remote-folder))(message "本地到远程同步完成。"))
  • 定义了一个函数 backup-sync-sync-local-to-remote,使用 rclone 将源文件夹
    同步到远程文件夹。

8. 同步远程到本地

(defun backup-sync-sync-remote-to-local ()"使用 rclone 将远程文件夹同步到源文件夹。"(interactive)(message "正在同步远程到本地..."(shell-command (format "rclone sync %s %s" backup-sync-remote-folder backup-sync-source-folder))(message "远程到本地同步完成。"))
  • 定义了一个函数 backup-sync-sync-remote-to-local,使用 rclone 将远程文件
    夹同步到源文件夹。

9. 双向同步

(defun backup-sync-bidirectional-sync ()"执行本地和远程文件夹之间的双向同步。"(interactive)(backup-sync-sync-local-to-remote)(backup-sync-sync-remote-to-local))
  • 定义了一个函数 backup-sync-bidirectional-sync,执行本地和远程文件夹之间的
    双向同步。

10. 自动同步

(defun backup-sync-auto-sync ()"自动同步本地和远程文件夹。"(when backup-sync-enable-auto-sync(backup-sync-bidirectional-sync)(message "自动同步完成。")))
  • 定义了一个函数 backup-sync-auto-sync,用于自动同步本地和远程文件夹。

11. 定时器

(defvar backup-sync-timer nil"自动同步的定时器。")(defun backup-sync-start-auto-sync ()"启动自动同步定时器。"(when backup-sync-enable-auto-sync(setq backup-sync-timer(run-at-time t backup-sync-auto-sync-interval 'backup-sync-auto-sync))(message "自动同步已启动。")))(defun backup-sync-stop-auto-sync ()"停止自动同步定时器。"(when backup-sync-timer(cancel-timer backup-sync-timer)(setq backup-sync-timer nil)(message "自动同步已停止。")))
  • 定义了一个变量 backup-sync-timer,用于存储定时器。
  • 定义了函数 backup-sync-start-auto-sync 和 backup-sync-stop-auto-sync,分
    别用于启动和停止自动同步定时器。

12. 启动和退出时同步

(defun backup-sync-on-startup ()"在 Emacs 启动时同步。"(when backup-sync-sync-on-startup(backup-sync-bidirectional-sync)(message "启动时同步完成。")))(defun backup-sync-on-exit ()"在 Emacs 退出时同步。"(when backup-sync-sync-on-exit(backup-sync-bidirectional-sync)(message "退出时同步完成。")))
  • 定义了函数 backup-sync-on-startup 和 backup-sync-on-exit,分别在 Emacs
    启动和退出时执行双向同步。

13. 添加钩子

(add-hook 'emacs-startup-hook 'backup-sync-on-startup)
(add-hook 'kill-emacs-hook 'backup-sync-on-exit)
  • 将 backup-sync-on-startup 添加到 emacs-startup-hook,在 Emacs 启动时执行。
  • 将 backup-sync-on-exit 添加到 kill-emacs-hook,在 Emacs 退出时执行。

14. 快捷键绑定

(global-set-key (kbd "C-c b b") 'backup-sync-backup)
(global-set-key (kbd "C-c b c") 'backup-sync-clean-old-backups)
(global-set-key (kbd "C-c b l") 'backup-sync-sync-local-to-remote)
(global-set-key (kbd "C-c b r") 'backup-sync-sync-remote-to-local)
(global-set-key (kbd "C-c b d") 'backup-sync-bidirectional-sync)
  • 为备份、清理旧备份、本地到远程同步、远程到本地同步和双向同步命令分别绑定了快捷键。

15. 启动自动同步

(backup-sync-start-auto-sync)
  • 在插件加载时启动自动同步定时器。

16. 提供插件

(provide 'backup-sync)
  • 表示插件加载完成,可以被其他代码加载。

总结

这个插件通过定义一系列自定义变量和函数,实现了本地文件夹的备份和与远程文件夹的
同步功能。它支持手动备份、清理旧备份、双向同步,以及自动同步功能,并且可以通过
快捷键和钩子方便地使用。

相关新闻

  • ubuntu 24.04虚拟机安装vgpu显卡驱动
  • 逆向分析CoreText中的字体级联/Font Fallback机制
  • 2025棋牌室加盟推荐麻友社,自主自助模式引领行业新风尚!

最新新闻

  • 昆明适合普通人变现黄金的靠谱门店,报价透明无乱扣费值得选择 - 奢侈品回收评测
  • 2026重庆黄金回收攻略:内行私藏变现门道,靠谱门店盘点 - 奢侈品回收测评
  • 大岭山企业如何在豆包获得推荐排名?2026年GEO优化实战全攻略 - 东莞选校指南
  • Claude Opus-4.7 实测:视觉语义理解与分步推理协作新范式
  • ATmega329系列MCU选型、硬件设计与中断编程实战指南
  • 2026华南GEO榜单TOP5横向对比 - 热点速览

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号