Emacs自定义插件进行笔记本地备份和RClone远程同步(KIMI)
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)
- 表示插件加载完成,可以被其他代码加载。
总结
这个插件通过定义一系列自定义变量和函数,实现了本地文件夹的备份和与远程文件夹的
同步功能。它支持手动备份、清理旧备份、双向同步,以及自动同步功能,并且可以通过
快捷键和钩子方便地使用。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/940342.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!