同步方案
方案1:fswatch 实时监控
- 特点:一修改文件就立刻同步发布
- 缺点:太频繁!你改一个字就发布一次,浪费资源
- 适合:需要实时更新的场景
方案2:crontab 定时发布
- 特点:每天固定时间发布一次
- 缺点:需要一直开机,关机就不会运行
- 适合:Mac 经常开机的情况
方案3:Git 配合 GitHub Actions ⭐️ 最推荐
- 特点:用 Git 管理文档,推送到 GitHub 后自动发布
- 优点:
- 不需要 Mac 一直开机
- 有版本控制,可以回退
- 更专业,更稳定
- 想发布时手动 push 一下即可
- 适合:所有场景 已完成方案一,有时间再继续鼓捣鼓捣方案三
问了ai很快给出了方案,没有理由偷懒了-.-//
2025-11-21 我发现一个命令可以一次执行就完成同步两个本地仓库,并且发布,然后设置定时自动运行该命令就可以了,最终选择了方案三,第一次尝试的时候死活不成功,这次很快就成功了,果然过于死磕并不是好事
监听工具对比
| 工具 | 推荐度 | 优点 | 适合情况 |
|---|---|---|---|
| chokidar-cli | ⭐⭐⭐⭐⭐ | 轻量、跨平台、Quartz 标配 | 最推荐 |
| fswatch | ⭐⭐⭐⭐ | mac 下性能最强 | Mac 用户 |
| nodemon | ⭐⭐⭐ | 日志清晰 | 需要日志的人 |
| Syncthing | ⭐⭐⭐⭐ | 不写代码、自动同步 | 只想同步文件 |
方案三
1.fswatch安装
# 安装
brew install fswatch
# 确认安装
fswatch --version
2.初始化 Git 仓库
cd /Users/jz/quartz
git init
git add .
git commit -m "initial commit"3.连接到GitHub
# 如果之前已经做过这些操作就不用重复
git remote add origin https://github.com/你的用户名/my-quartz.git
git branch -M main
git push -u origin main4.创建快速发布脚本
nano ~/github-push.sh粘贴(仓库地址改为自己的)
#!/bin/bash
# 设置环境变量,让 cron 能找到 npx ,提示找不到npx,但是能发布成功,下次再试试,如果一直成功就不改了
export PATH="/usr/local/bin:$PATH"
# 先同步 Obsidian 文件到 Quartz
OBSIDIAN_VAULT="/Users/jz/Library/Mobile Documents/iCloud~md~obsidian/Documents/all-in/2.Read"
QUARTZ_CONTENT="/Users/jz/quartz/content/2.Read"
# Quartz 项目根目录
QUARTZ_DIR="/Users/jz/quartz"
echo "$(date): 开始同步"
cp -r "$OBSIDIAN_VAULT"/* "$QUARTZ_CONTENT/"
# 进入 Quartz 目录
cd "$QUARTZ_DIR"
# Git 提交并推送
echo "提交到 Git..."
git add .
git commit -m "update $(date +%Y-%m-%d-%H:%M)"
git push
echo "发布到线上..."
npx quartz sync --no-pull
echo "完成!"只会把同名的文件替换,不会删除不同的文件
5.赋予执行权限
chmod +x ~/github-push.sh6.手动发布
~/github-push.sh7.定时自动发布
crontab
# 临时编辑器
EDITOR=nano crontab -e
# 每分钟执行
* * * * * /bin/bash ~/github-push.sh >> ~/cron-test.log 2>&1
# 选择适合的自动发布时间
**每天上午10点执行:**
0 10 * * * /bin/bash ~/github-push.sh >> ~/cron-test.log 2>&1
**每两天上午10点执行:**
0 10 */2 * * /bin/bash ~/github-push.sh >> ~/cron-test.log 2>&1
**每周四上午10点执行:**
0 10 * * 4 /bin/bash ~/github-push.sh >> ~/cron-test.log 2>&1
# 查看日志
cat ~/cron-test.log
# 清空日志
> ~/cron-test.log常用命令
# 编辑当前用户的定时任务
crontab -e
# 查看当前用户的定时任务
crontab -l
# 删除当前用户的所有定时任务
crontab -r
# 编辑指定用户的定时任务(需要 root 权限)
sudo crontab -u username -e方案一
windows版
2.使用
obsidian路径:/Users/jz/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/all\ in/2.Read quartz路径:/Users/jz/quartz/content/2.Read
2.1创建一个自动化脚本
打开终端, (创建一个文本文件)
nano ~/sync-quartz.sh把下面的内容复制粘贴进去:
#!/bin/bash
# Obsidian 路径(iCloud 同步的)
OBSIDIAN_VAULT="/Users/jz/Library/Mobile Documents/iCloud~md~obsidian/Documents/all-in/2.Read"
# Quartz 内容路径
QUARTZ_CONTENT="/Users/jz/quartz/content/2.Read"
# Quartz 项目根目录
QUARTZ_DIR="/Users/jz/quartz"
# 记录日志
echo "$(date): 开始同步" >> ~/quartz-sync.log
# 复制文件到 Quartz
cp -r "$OBSIDIAN_VAULT"/* "$QUARTZ_CONTENT/"
# 进入 Quartz 目录并发布
cd "$QUARTZ_DIR"
npx quartz sync --no-pull
echo "$(date): 同步完成" >> ~/quartz-sync.logwindows:按 Ctrl + X,然后按 Y,再按回车保存
mac:按 control + X,然后按 Y,再按回车保存
2.2让脚本可以运行
chmod +x ~/sync-quartz.sh2.3手动测试一次
~/sync-quartz.sh2.4设置每天自动运行
crontab -e
# (每天晚上2点)运行:
0 2 * * * /Users/jz/sync-quartz.sh保存退出(Ctrl+X, 然后 Y, 然后回车) 输入crontab -e看不到选项/进入后不能编辑时
# 输入crontab -e看不到选项时
export EDITOR=nano
mac版可以用launchd
不建议设置太多,其实用crontab就差不多了,不然不好管理
1. 创建 launchd 配置文件
nano ~/Library/LaunchAgents/com.user.sync-quartz.plist2.粘贴配置内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.sync-quartz</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/Users/jz/sync-quartz.sh</string>
</array>
<!-- 每天凌晨2点运行 -->
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>2</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<!-- 日志文件 -->
<key>StandardOutPath</key>
<string>/Users/jz/logs/sync-quartz.log</string>
<key>StandardErrorPath</key>
<string>/Users/jz/logs/sync-quartz-error.log</string>
<!-- 即使上次运行失败也继续运行 -->
<key>RunAtLoad</key>
<false/>
</dict>
</plist>3.创建日志目录
mkdir -p ~/logs4.加载并启动任务
# 加载任务
launchctl load ~/Library/LaunchAgents/com.user.sync-quartz.plist
# 检查是否加载成功
launchctl list | grep sync-quartz5.立即运行测试
# 手动触发一次
launchctl start com.user.sync-quartz
# 查看日志
cat ~/logs/sync-quartz.log
cat ~/logs/sync-quartz-error.log6.定时运行
<!-- 每小时运行 -->
<key>StartInterval</key>
<integer>3600</integer>
<!-- 或者每天多次运行(早8点和晚8点) -->
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Hour</key>
<integer>8</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<dict>
<key>Hour</key>
<integer>20</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
</array>常用命令
# 停止任务
launchctl stop com.user.sync-quartz
# 卸载任务
launchctl unload ~/Library/LaunchAgents/com.user.sync-quartz.plist
# 重新加载(修改配置后)
launchctl unload ~/Library/LaunchAgents/com.user.sync-quartz.plist
launchctl load ~/Library/LaunchAgents/com.user.sync-quartz.plist
# 查看当前用户的所有任务
launchctl list | wc -l
# 查看任务状态
launchctl list | grep sync-quartz
# 启动任务(立即执行一次)
launchctl start com.example.myscript
# 停止任务
launchctl stop com.example.myscript
# 查看所有已加载的任务
launchctl list
# 查看特定任务状态
launchctl list | grep com.example
# 查看任务详细信息
launchctl print gui/$(id -u)/com.example.myscript
# 移除任务
launchctl remove com.example.myscript