Mac文件夹间自动定时同步的方法

需求情景

我在Mac上有好几个分散在各处的文件夹需要备份到移动硬盘上,而且最好是增量备份的方式以节约时间。[1]需求如下:

  1. 每个文件夹需要分开各自备份。
  2. 能定时自动备份最好。

解决方案

基础软件

FreeFileSync
顾名思义,免费的文件同步软件。官方自带简体中文
界面如图,与知名文件同步软件GoodSync(它在Mac端搜不到破解版囧)感觉功能上也相当,都能一目了然地看到文件夹&文件之间的区别。可能区别在同步算法上吧,不过我这种轻量用户也不在乎。

用户界面

这个软件有个很好的功能就是能创建同步的批处理,把两侧的文件夹、同步的方向设定好,直接存为一个后缀为ffs_batch的文件,打开这个文件就能自动完成同步。
注意看红色框处

还可以选择当出现错误、完成时如何进行,以及日志保存的位置。
保存批处理文件的选项

进阶技巧

由于我上述的需求,我需要自己写一些脚本程序来实现了。

自动运行多个批处理,借助AppleScript

激活Spotlight搜索,输入脚本编辑器[2]以打开。

空白的脚本编辑器

小注:我之前对AppleScript[3]完全不了解,以下还是我写的第一个小脚本。在我有限的理解里,AppleScript与操作系统高度集成,可以更方便地直接对系统进行操作。

而这次我们只需要用到打开文件[4]的功能(是不是特别低端)。

tell application "Finder"
    open alias "Macintosh HD:Users:Adam:Documents:FileSync的批处理和日志文件:xxx.ffs_batch"
    delay 10.0
    open alias "Macintosh HD:Users:Adam:Documents:FileSync的批处理和日志文件:yyy.ffs_batch"
    delay 10.0
    open alias "Macintosh HD:Users:Adam:Documents:FileSync的批处理和日志文件:zzz.ffs_batch"
    open alias "Macintosh HD:Users:Adam:Documents:FileSync的批处理和日志文件"
end tell

display notification "文件夹同步开始工作"
  • tell用来将任务交给Mac里的某个程序来做,tell application "Finder"
    就是打开Finder了。
  • open是打开文件夹或文件,有人会问“我不知道路径在AppleScript里怎么表达怎么办呢?”,有下图的人性化方案。
    敲入命令choose file,以某文件为例:
    获取文件路径方法

    点击选取之后就会出现alias "Macintosh HD:Users:Adam:Library:Mobile Documents:com~apple~ScriptEditor2:Documents:未命名.scpt"的字样,这些就是输入open之后的东西了。
  • delay的作用是延缓下一步执行,因为每次执行一个批处理都要花一点时间,因此如果不让程序暂停,则会出错。
  • display notification顾名思义,写个通知告诉我脚本运行了。

脚本写好之后可以将其保存成可直接执行的应用程序,第一步就大功告成了。

保存时注意

创建任务描述文件.plist实现定时自动功能

同样这是我第一次接触.plist,更详细的可见Mac下添加定时任务

<?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.adam.foldersync</string>

    <!-- 要运行的程序 -->
    <key>Program</key>
    <string>/Users/Adam/Documents/FileSync的批处理和日志文件/定期同步.app/Contents/MacOS/applet</string>

    <!-- 运行时间 -->
    <key>StartCalendarInterval</key>
    <dict>

      <key>Minute</key>
      <integer>00</integer>

      <key>Hour</key>
      <integer>23</integer>

      <key>Weekday</key>
      <integer>0</integer>

    </dict>

    <!-- 标准输入文件 -->
    <key>StandardInPath</key>
    <string>/Users/Adam/Documents/FileSync的批处理和日志文件/run-in.log</string>

    <!-- 标准输出文件 -->
    <key>StandardOutPath</key>
    <string>/Users/Adam/Documents/FileSync的批处理和日志文件/run-out.log</string>

    <!-- 标准错误输出文件 -->
    <key>StandardErrorPath</key>
    <string>/Users/Adam/Documents/FileSync的批处理和日志文件/run-err.log</string>

  </dict>
</plist>

  • <string>com.adam.foldersync</string>是我给这个任务起的名字
  • 对于<string>/Users/Adam/Documents/FileSync的批处理和日志文件/定期同步.app/Contents/MacOS/applet</string>定期同步.app是上文将AppleScript保存成应用程序生成的东西,/Contents/MacOS/applet照抄[5]
  • <key>Weekday</key><integer>0</integer>表示星期天,<key>Hour</key><key>Minute</key>就分别表示几点几分了。
  • 保存成com.adam.foldersync.plist将其放入~/Library/LaunchAgents——此为用户自定义任务项的目录。

最后一步,拧紧发条,定时任务启动!

在Mac的终端输入launchctl load ~/Library/LaunchAgents/com.adam.foldersync.plist,便启动了这个任务。
可以输入launchctl list查看你的任务是否在列表里,如果在的话,就成功一半了,之后就查看/Users/Adam/Documents/FileSync的批处理和日志文件/中的日志来看执行情况吧。

我的plist已加载

尾声

当初执意要换上Mac就是因为听说Mac OS下工作(我白天的职业环境是Windows,所以这里不谈Microsoft Office生产力等)的效率高,买回来之后我也就秉承着这个提高效率的执念去研究着玩,确实也依靠Automator实现了一些。以前玩Windows的时候还没深入到自己变成的地步,所以不知道Mac OS比Windows效率高到底是真是伪,看客要是有想法敬请交流。

最后,文章转载请注明出处。(虽然我知道没人会转的)


  1. 当然了,TimeMachine也能达到这个目的,但是移动硬盘处的文件夹我需要上传至网盘再做一次备份。

  2. 对于Mac OS 10.11之前叫AppleScript编辑器

  3. 完整文档可参见AppleScript Programming

  4. 文件处理的详细参见AppleScript学习笔记(五)文件夹,文件和路径

  5. 此处参考了Mac OS X下使用launchctl定时启动AppleScript脚本

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容