Hi! 我编写了一个用于Overleaf项目备份的命令行工具olsync, 希望可以帮助你更好的管理你的latex项目以及私有化的Overleaf服务实例.

如果喜欢, 请点一个Star, 谢谢

olsync 是一个简单的命令行工具,用于将你的 Overleaf 项目进行异地同步,从而轻松备份和管理离线 LaTeX 项目。

为什么需要 olsync

Overleaf 官方提供的项目同步功能(如 Git 访问或同步到 GitHub)是 付费功能,只有订阅了高级版才可以使用。

而如果你使用的是 自建 Overleaf 服务,同步功能同样需要购买付费版本才会开放。

此外,自建 Overleaf 服务虽然便于团队协作,但 硬盘一旦损坏或服务器意外宕机,就可能导致项目文件丢失

因此,最稳妥的做法是 定时将 Overleaf 项目异地备份,避免单点故障带来的风险。

olsync 正是为此而生:它可以在不依赖付费功能的前提下,自动下载并同步 Overleaf 项目,帮助你轻松完成本地备份。

  • 并且未来计划实现和Overleaf官方同步服务一样的Github自动同步功能(更好的异地备份和用户体验)

为了不付钱给overleaf在我写论文的时候烦我, 我探索和编写本地部署overleaf服务帮助latex论文编写这篇博客到现在自动备份数据防止丢失, 真的是花了一些功夫

对比其他工具

相比通用的文件同步工具(如 Syncthing),olsync 更适合 Overleaf 项目的备份场景。

首先,我的自建 Overleaf 服务是通过 Docker 部署的,项目数据文件夹的 owner 并非当前用户,直接同步需要 sudo 权限,使用不便。

其次,Overleaf 的备份应当 面向具体的 LaTeX 项目,而不是面向整个数据库或文件卷,这样才能精确控制需要备份的项目,避免无关文件。

最后,olsync 提供简洁的命令行接口,结合定时任务即可实现自动化备份,比通用同步工具更轻量、更符合日常需求。

olsync

Github: https://github.com/xuhe2/olsync

功能

  • 自定义服务地址

    通过 baseUrl 指定 Overleaf 服务的主页地址,支持自建 Overleaf 服务。

  • 灵活的备份路径

    可通过 backup.path 设置备份文件保存位置,支持相对路径和绝对路径。

  • 定时任务支持

    使用 backup.schedule 配置 Cron 表达式,实现定时自动备份,例如每 6 小时执行一次。

  • 备份数量控制

    通过 backup.keep_last 设置保留的最近备份数量,自动清理过期文件,避免磁盘占满。

  • 按项目筛选备份

    projects.include 中列出需要备份的项目名称,只备份指定的 LaTeX 项目,避免无关项目占用空间。

Usage

Install

olsync 的使用方法可参考项目的 README

安装方式非常简单,可以选择以下两种方法:

  1. Clone 仓库并编译
git clone https://github.com/xuhe2/olsync.git
cd olsync
make build
  1. Go install
go install github.com/xuhe2/olsync@latest

从浏览器中获取cookie并且配置好config.yaml就可以

参考config.template.yaml文件

Config

# config.yaml
# This file contains the configuration for the olsync application. overleaf:
# The base URL for the Overleaf API.
# This should typically be "https://www.overleaf.com".
baseUrl: "https://www.overleaf.com"
# baseUrl: "http://localhost:8880" # local overleaf server # The session cookies required for authentication.
# You can get these from your browser's developer tools after logging in.
cookies:
- name: "overleaf_session2"
value: ""
# for local overleaf server
# - name: "overleaf.sid"
# value: "" backup:
path: "./Backup" # 备份文件夹,支持相对路径
schedule: "0 * */6 * * *" # Cron 表达式,每 6 小时备份一次
keep_last: 5 # 保留最近 5 个备份,自动清理旧文件 projects:
include: # 通过项目名列表来确定需要备份哪些项目
- "quick-LaTeX"

按照需求填写即可

Run

./bin/olsync-linux-amd64 ./config.yaml

效果

我每隔一分钟备份一个项目进行验证

检查备份文件

未来计划

未来计划中,olsync 将支持自动同步到 GitHub,实现与 Overleaf 官方付费功能类似的体验。

该功能将基于 Go 的 go-git 包实现,能够在每次成功备份后自动将项目内容推送到指定的 Git 仓库。

这将使用户不仅可以本地备份,还能享受版本管理和远程冗余存储,进一步降低数据丢失风险。

TIP: 异常容忍

在备份过程中,如果由于网络问题导致部分项目下载失败,olsync 仍会继续尝试备份其他项目,保证尽量多的项目被保存。

但此时该次备份文件夹是不完整的,不会触发 keep_last 的旧备份清理逻辑,只有当本次所有项目均备份成功时才会清理旧文件夹。

这意味着在网络不稳定的情况下,可能会出现备份文件夹数量逐渐增加的情况,需要用户自行检查并清理不完整的备份或者等待第一次完整备份的出现。

Overleaf项目文件同步工具: olsync的更多相关文章

  1. Java并发之CyclicBarrier 可重用同步工具类

    package com.thread.test.thread; import java.util.Random; import java.util.concurrent.*; /** * Cyclic ...

  2. Java并发之CountDownLatch 多功能同步工具类

    package com.thread.test.thread; import java.util.Random; import java.util.concurrent.*; /** * CountD ...

  3. Java核心知识点学习----线程同步工具类,CyclicBarrier学习

    线程同步工具类,CyclicBarrier日常开发较少涉及,这里只举一个例子,以做备注.N个人一块出去玩,相约去两个地方,CyclicBarrier的主要作用是等待所有人都汇合了,才往下一站出发. 1 ...

  4. Rsync 3.1.0 发布,文件同步工具

    文件同步工具Rsync 3.1.0发布.2013-09-29 上一个版本还是2011-09-23的3.0.9 过了2年多.Rsync基本是Linux上文件同步的标准了,也可以和inotify配合做实时 ...

  5. java5 CountDownLatch同步工具

    好像倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当到达0时,所有等待者就开始执行. java.util.concurrent.CountDownLatch ...

  6. mysql对比表结构对比同步,sqlyog架构同步工具

    mysql对比表结构对比同步,sqlyog架构同步工具 对比后的结果示例: 执行后的结果示例: 点击:"另存为(S)" 按钮可以把更新sql导出来.

  7. 文件和文件夹同步工具AFiles 1.0 发布

    文件和文件夹同步工具AFiles 1.0  正式发布了! 本软件支持按文件日期或长度的各种比较方式来同步文件或者文件夹. 支持双向同步功能. 支持深层文件夹功能. 可以自动产生比较和同步的记录情况. ...

  8. rsync同步工具学习笔记

    rsync同步工具 1.rsync介绍 rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.rsync软件适用于unix/linux/windows等多种操作 ...

  9. 文件同步工具BT Sync介绍和使用说明

    BT Sync介绍 BT 下载,相信大伙儿都知道的.今儿个要介绍的 BT Sync,跟 BT 下载一样,都是 BitTorrent 公司发明滴玩意儿,都是采用 P2P 协议来进行传输. 简而言之,BT ...

  10. Microsoft SyncToy 文件同步工具

    Microsoft SyncToy SyncToy 是由 微软 推出的一款免费的文件夹同步工具.虽然名字中有一个 Toy,但是大家可千万不要误以为它的功能弱爆了.实际上,我感觉这款软件还真是摆脱了微软 ...

随机推荐

  1. 前端开发系列043-基础篇之TypeScript语言特性(三)

    本文简单介绍TypeScript语言中的以下特性: ❏ 解构赋值 ❏ 函数介绍 ❏ 命名空间 一.解构&展开 解构赋值语法使得我们可以将值从数组或者将属性从对象中提取对应的变量中.下面我们将简 ...

  2. 开发工具系列003-OSX系统基础命令

    本文简单记录工作中常用的命令行(持续更新),因为我用的是`Mac OSX`系统,因此部分命令在`Windows系统`中将失效(或需调整),此外需注意Windows的文件系统路径斜杠和`UNIX`是反的 ...

  3. ?? js 语法糖

    leetcode 2619 遇到了 ?? 语法糖,简而言之 可选链功能 就是防止抛出异常 caught TypeError: Cannot read properties of undefined ( ...

  4. Linux 网络编程 简单 TCP连接sock连接的例子

    服务端 #include <stdio.h> #include <stdlib.h> #include <strings.h> #include <sys/t ...

  5. C++ 类中什么时候需要一个operator<

    简介 当涉及类对象的排序的时候可以直接构建一个符号重定义函数 比如以set来组织对象的时候,对象最好带一个operator<函数 code /* used to use Vertex as ke ...

  6. java 文本窗口

    简介 java 文本窗口 code package calcu; import java.awt.BorderLayout; import java.awt.GridLayout; import ja ...

  7. 快麦ERP退货借助APPlink快速同步CRM

    什么是APPlink? APPlink是RestCloud打造的一款简单易用的零代码自动化集成平台,为业务流程提供自动化的解决方案,将企业内部的核心系统以及第三方应用程序和云服务等进行集成.无论是开发 ...

  8. SciTech-Mathematics-Probability+Statistics-Distribution: PDF(Probability Distribution Function) for CDF(cumulative distribution function) or PDF(probability density function)

    SciTech-Mathematics-Probability+Statistics-Distribution: PDF(Probability Distribution Function) http ...

  9. POLIR-Society-Organization-Psychology-System Awareness-Training: The Junto Institute: {RelationshipMgmt., SocialAwareness, SelfMgmt., SelfAwareness}

    POLIR-Society-Organization-Psychology-Emotion SYSTEMS AWARENESS https://systemsawareness.org/about/# ...

  10. FreeSwitch Hangup-Cause电话挂断原因速查

    Freeswitch官网太慢了,经常还打不开,把电话挂断原因大全复制一份到这里,方便日常查看 ITU-T Q.850 Code SIP Equiv. Enumeration Cause Descrip ...