自动备份 Mac 电脑的笔记文件
在日常使用 Mac 的过程中,我们经常会记录一些笔记或者重要的文件。这些笔记可能包含了工作中的灵感、学习中的重点和生活中的琐事。因此,定期备份这些笔记显得尤为重要。本文将列举几种简单的方法并从中选择最合适的方法,即使你是编程小白,也能轻松帮助你自动备份Mac的笔记文件。
使用 iCloud 自带的备份
虽然 iCloud 有默认的自动备份,但是缺点也比较明显。
默认的备份只能备份 桌面
和 文稿
两个目录,不能满足自定义。
而且开启这个 桌面与文稿文件夹
会将桌面上的文件也会同步,但是大多数场景下,这并不是我们希望的。
使用 Automator 自动备份
虽然使用 Automator
也能实现自动备份,并且提供了很高的自定义和自动化功能,可以实现许多个性化的需求。
但是使用 Automator
操作步骤相对来说比较多,过程相对复杂,对新手不友好。
下面是使用 Automator
编写自动备份程序的大致步骤:
打开Automator,选择“新建文稿”,选择“应用程序”。
在左侧栏中选择“文件和文件夹”,然后拖动“复制Finder项目”到右侧的工作流程区域。
设置源文件夹为你的笔记文件夹,目标文件夹为你的备份位置。
保存该Automator应用,并设置定时任务或手动运行以实现定期备份。
有基础的同学可以自行探索,下面我们讨论使用脚本实现自动定时同步笔记的方案。
使用 shell 脚本 + 定时任务
shell 脚本:
要实现与 iCloud 云盘的文件传输我们要使用一个非常重要而且在 macOS 中也很流行的工具 rsync
。
rsync
是一个用于在计算机之间同步文件和目录的工具,以下是 rsync
在 macOS 中的一些主要特点:
增量同步:
rsync
只复制自上次同步以来更改的文件,这大大减少了后续的文件数据传输量和时间,这也是rsync
最重要的功能之一。
远程同步:
rsync
支持通过 SSH 协议进行远程同步,这意味着可以安全地在网络上进行文件传输,包括与远程服务器进行文件同步。
保留文件属性:
rsync
可以保留文件的权限、时间戳、符号链接和其他属性,确保目标目录中的文件与源目录中的文件完全一致。
符号链接:实质上是一个存放目标文件路径的特殊文件,拥有自己的
inode
和文件属性。排除和包含:
rsync
提供强大的排除和包含选项,可以根据特定的模式排除或包含文件和目录,比如 macOS 中用于存储目录的自定义属性和元数据的文件.DS_Store
。
压缩传输:
- 可以使用
-z
选项启用压缩传输,减少网络带宽占用,提高文件传输的效率。
- 可以使用
断点续传:
rsync
支持断点续传功能,可以在传输中断后继续传输,避免重新开始,大文件传输必须。
本地和远程同步:
- 可以在本地同步两个目录,也可以在本地和远程之间进行同步,云或者是服务器。
基于校验和的同步:
rsync
使用校验和算法来检测文件的差异,而不是仅仅依赖于文件的时间戳和大小。
话不多说,直接上代码:
#!/bin/bash
# 日志文件路径
LOGFILE="/Users/hersan/shell/log/sync_note_to_icloud.log"
# 设置UTF-8编码
export LANG=en_US.UTF-8
# 记录开始时间
echo "$(date): 开始同步" >> "$LOGFILE"
# 防止电脑进入睡眠(120s -> 2分钟)
caffeinate -s -t 120 &
# 要同步的本地目录
LOCAL_DIR="/Users/hersan/笔记" # 这里改成你想要同步的本地目录
# iCloud 目录
ICLOUD_DIR="$HOME/Library/Mobile Documents/com~apple~CloudDocs"
# iCloud 笔记目录
ICLOUD_NOTE_DIR="$ICLOUD_DIR/笔记"
# 确保 iCloud 笔记目录已下载到本地
if [ ! -d "$ICLOUD_NOTE_DIR" ]; then
echo "$(date): iCloud 笔记目录未找到,将同步本地笔记目录到 iCloud" >> "$LOGFILE"
mkdir -p "$ICLOUD_NOTE_DIR"
fi
# 删除目标目录中的 .DS_Store 文件
/usr/bin/find "$ICLOUD_NOTE_DIR" -name ".DS_Store" -type f -delete
# 使用 rsync 同步目录,并排除 .DS_Store 文件
# 将本地笔记目录同步到 iCloud 笔记目录,并会删除目标目录中在源目录中不存在的文件
rsync -av --delete --exclude=".DS_Store" "$LOCAL_DIR/" "$ICLOUD_NOTE_DIR" >> "$LOGFILE" 2>&1
# 记录结束时间
echo "$(date): 同步完成" >> "$LOGFILE"
使用 cron
创建定时任务
在终端中输入以下命令,打开当前用户的 crontab 文件:
crontab -e
- 如果是第一次使用 crontab,它可能会提示你选择一个文本编辑器,选择你熟悉的即可(例如 vim 或 nano)
在 crontab 文件中,添加定时任务,例如:
*/30 * * * * /Users/hersan/shell/sync_note_to_icloud.sh
- 后面的路径换成你的 shell 脚本的绝对路径
附上
crontab
文件的编写格式:sh* * * * * <command> - - - - - | | | | | | | | | +---- 星期几 (0 - 7) (0 或 7 是星期天) | | | +------ 月份 (1 - 12) | | +-------- 每月的第几天 (1 - 31) | +---------- 小时 (0 - 23) +------------ 分钟 (0 - 59)
- 例如,你想每天早上 9:00 执行一次脚本:
0 9 * * * /Users/hersan/shell/sync_note_to_icloud.sh
- 如果你希望每隔 5 分钟执行一次脚本:
*/5 * * * * /Users/hersan/shell/sync_note_to_icloud.sh
- 例如,你想每天早上 9:00 执行一次脚本:
写在最后
如果是同步笔记或者日常中的 office
办公文件等使用本文的方法足够,大文件例如视频等请考虑压缩传输、分片同步和断点续传。
热爱编程,开源社区活跃参与者