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

news/2025/10/19 14:42:11/文章来源:https://www.cnblogs.com/xiaoma2018/p/19150842

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-syncbackup-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-startupbackup-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,一经查实,立即删除!

相关文章

LLM分词器

BERT基座模型

ubuntu 24.04虚拟机安装vgpu显卡驱动

# 安装依赖 sudo apt install build-essential linux-headers-generic libglvnd-dev pkg-config -y # 安装dkms sudo apt install dkms -y # 开启32位兼容库 sudo dpkg --add-architecture i386 sudo apt update # 安装…

CF1859F Teleportation in Byteland

树链剖分维护贡献发现最优策略一定是在一个位置训练,之后就直接到目标点,那么我们可以枚举训练次数,之后就可以转了。那么也就是说我们希望找到一个 \(u,v\) 路径上的点 \(s\),那么我们之后一定是从 \(s\) 出发,找…

密钥自己生成的方法

两人一组,在Ubuntu或openEuler中(推荐openEuler)中使用OpenSSL编程实现带签名的数字信封协议。使用OpenSSL库时,Alice发送,Bob接收。Ailice,Bob在实验中要替换为自己的8位学号+姓名。使用Markdown记录详细记录实…

2025机床维修厂家推荐:永华鑫数控设备,专业服务保障生产!

2025机床维修厂家推荐:永华鑫数控设备,专业服务保障生产!随着工业4.0的推进和智能制造的快速发展,机床作为制造业的核心设备,其稳定性和可靠性直接影响着企业的生产效率和产品质量。然而,由于长期高负荷运转及环…

逆向分析CoreText中的字体级联/Font Fallback机制

逆向分析CoreText中的字体级联/Font Fallback机制完整内容也可以在公众号「非专业程序员Ping」查看 一、引言本文基于Xcode 16.4,iOS 18.5模拟器分析,不同系统版本可能有区别。前面我们介绍了自定义文字排版引擎的原…

2025棋牌室加盟推荐麻友社,自主自助模式引领行业新风尚!

2025棋牌室加盟推荐麻友社,自主自助模式引领行业新风尚!当前棋牌室加盟领域的技术挑战随着科技的不断进步和消费者需求的多样化,棋牌室加盟领域面临着诸多技术挑战。传统的棋牌室经营模式已经难以满足现代消费者的需…

计算机硬件-网络

网卡 网卡如下 :想起网卡就想起了零拷贝 , 软件开发中常常遇到 ,例如 MQ 中 ,例如 Nginx 中 . 首先,什么是“零拷贝”? “零拷贝”的目标,顾名思义,就是尽量减少甚至完全避免数据在内存中的不必要的复制次数。 在传…

2025TYPE-C母座优质厂家推荐,创粤科技TID认证高速传输首选!

2025 TYPE-C母座优质厂家推荐,创粤科技TID认证高速传输首选!当前TYPE-C母座技术挑战随着电子设备的不断发展,TYPE-C母座作为连接器的重要组成部分,其需求量和性能要求也在不断提高。当前,TYPE-C母座面临诸多技术挑…

2025年医药冷链运输厂家推荐排行榜,药品/临床样本/CAR-T/蛋白/诊断试剂/生物/血液/细胞/芯片运输,冷藏车/冷藏箱/保温箱/干冰/液氮/温控/国际冷链公司推荐!

2025年医药冷链运输厂家推荐排行榜:药品/临床样本/CAR-T/蛋白/诊断试剂/生物/血液/细胞/芯片运输,冷藏车/冷藏箱/保温箱/干冰/液氮/温控/国际冷链公司推荐随着全球生物医药行业的快速发展,医药冷链运输的需求日益增…

Ubuntu 桌面美化

1.主题安装 1.1.更新 sudo apt update1.2.安装tweak sudo apt install gnome-tweaks1.3.安装firefox插件1.4.安装gnome-shell sudo apt install chrome-gnome-shell -y1.5.安装扩展管理器 sudo apt install gnome-shel…

题解:CF1336E2 Chiori and Doll Picking (hard version)

很牛很牛很牛的题。 题意:给出 \(n\) 个数 \(a_i\),保证 \(a_i<2^m\),问对于 \(i\in[0,m]\),从这 \(n\) 个数取出若干个异或值的 \(1\) 的个数为 \(i\) 的方案数。\(n\le 2\times 10^5,m\le 53\)。 做法: 首先…

MantisBT vs Kanass,开源项目管理工具一文全面对比分析 - 详解

MantisBT vs Kanass,开源项目管理工具一文全面对比分析 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Co…

2025工作服厂家推荐:深圳市贵格服饰,专业定制各类高品质工作服!

2025工作服厂家推荐:深圳市贵格服饰,专业定制各类高品质工作服!随着社会的发展和科技的进步,各行各业对工作服的需求越来越高。无论是防静电工作服、劳保工作服,还是国网工作服、餐厅工作服等,都面临着新的技术挑…

flutter 环境搭建

flutter 环境搭建2025-10-19 14:11 qgbo 阅读(0) 评论(0) 收藏 举报1. 先安装 flutter, 湿这个命令可以用。设置 FLUTTER_HOMEexport FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn &&export …

Apollo自动驾驶平台:开源、高性能的自动驾驶解决方案

Apollo是百度推出的开源自动驾驶平台,提供高性能、灵活的架构,加速自动驾驶车辆的开发、测试和部署。支持多种硬件架构,包含完整的模块化解决方案和丰富的开发工具。Apollo自动驾驶平台 Apollo 是百度推出的开源自动…

2025不锈钢清洗钝化液推荐:隆彦商贸环保高效,品质卓越!

2025不锈钢清洗钝化液推荐:环保高效,品质卓越!随着工业技术的不断进步,不锈钢制品在各个领域的应用越来越广泛。然而,不锈钢表面处理过程中的酸洗钝化处理一直是一个技术挑战。本文将深入探讨当前不锈钢清洗钝化液…

2025年陶瓷过滤机厂家推荐排行榜,陶瓷真空过滤机/盘式陶瓷过滤机/矿用陶瓷过滤机/全自动陶瓷过滤机/固液分离设备公司精选

2025年陶瓷过滤机厂家推荐排行榜,陶瓷真空过滤机/盘式陶瓷过滤机/矿用陶瓷过滤机/全自动陶瓷过滤机/固液分离设备公司精选随着工业技术的不断发展,陶瓷过滤机在矿业、化工、制药等多个领域中的应用越来越广泛。为了帮…

2019年机器学习研究奖项获奖名单公布

某中心宣布2019年第二季度和第三季度机器学习研究奖项的13位获奖者,涵盖深度学习框架、自动摘要、医疗健康、多语言处理等多个前沿技术领域的研究项目。2019年第二季度/第三季度机器学习研究奖项获奖者公布 机器学习研…

[Linux] nsswitch.conf: Linux名称服务和切换配置

[Linux] nsswitch.conf: Linux名称服务和切换配置$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");目录00 概述01 用户和组信息02 网络名称解析03 网络服务与…