Mac文件夾間自動定時同步的方法

需求情景

我在Mac上有好幾個分散在各處的文件夾需要備份到移動硬盤上,而且最好是增量備份的方式以節(jié)約時間。[1]需求如下:

  1. 每個文件夾需要分開各自備份。
  2. 能定時自動備份最好。

解決方案

基礎(chǔ)軟件

FreeFileSync
顧名思義,免費的文件同步軟件。官方自帶簡體中文。
界面如圖,與知名文件同步軟件GoodSync(它在Mac端搜不到破解版囧)感覺功能上也相當(dāng),都能一目了然地看到文件夾&文件之間的區(qū)別??赡軈^(qū)別在同步算法上吧,不過我這種輕量用戶也不在乎。

用戶界面

這個軟件有個很好的功能就是能創(chuàng)建同步的批處理,把兩側(cè)的文件夾、同步的方向設(shè)定好,直接存為一個后綴為ffs_batch的文件,打開這個文件就能自動完成同步。
注意看紅色框處

還可以選擇當(dāng)出現(xiàn)錯誤、完成時如何進行,以及日志保存的位置。
保存批處理文件的選項

進階技巧

由于我上述的需求,我需要自己寫一些腳本程序來實現(xiàn)了。

自動運行多個批處理,借助AppleScript

激活Spotlight搜索,輸入腳本編輯器[2]以打開。

空白的腳本編輯器

小注:我之前對AppleScript[3]完全不了解,以下還是我寫的第一個小腳本。在我有限的理解里,AppleScript與操作系統(tǒng)高度集成,可以更方便地直接對系統(tǒng)進行操作。

而這次我們只需要用到打開文件[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用來將任務(wù)交給Mac里的某個程序來做,tell application "Finder"
    就是打開Finder了。
  • open是打開文件夾或文件,有人會問“我不知道路徑在AppleScript里怎么表達(dá)怎么辦呢?”,有下圖的人性化方案。
    敲入命令choose file,以某文件為例:
    獲取文件路徑方法

    點擊選取之后就會出現(xiàn)alias "Macintosh HD:Users:Adam:Library:Mobile Documents:com~apple~ScriptEditor2:Documents:未命名.scpt"的字樣,這些就是輸入open之后的東西了。
  • delay的作用是延緩下一步執(zhí)行,因為每次執(zhí)行一個批處理都要花一點時間,因此如果不讓程序暫停,則會出錯。
  • display notification顧名思義,寫個通知告訴我腳本運行了。

腳本寫好之后可以將其保存成可直接執(zhí)行的應(yīng)用程序,第一步就大功告成了。

保存時注意

創(chuàng)建任務(wù)描述文件.plist實現(xiàn)定時自動功能

同樣這是我第一次接觸.plist,更詳細(xì)的可見Mac下添加定時任務(wù)。

<?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>

    <!-- 標(biāo)準(zhǔn)輸入文件 -->
    <key>StandardInPath</key>
    <string>/Users/Adam/Documents/FileSync的批處理和日志文件/run-in.log</string>

    <!-- 標(biāo)準(zhǔn)輸出文件 -->
    <key>StandardOutPath</key>
    <string>/Users/Adam/Documents/FileSync的批處理和日志文件/run-out.log</string>

    <!-- 標(biāo)準(zhǔn)錯誤輸出文件 -->
    <key>StandardErrorPath</key>
    <string>/Users/Adam/Documents/FileSync的批處理和日志文件/run-err.log</string>

  </dict>
</plist>

  • <string>com.adam.foldersync</string>是我給這個任務(wù)起的名字
  • 對于<string>/Users/Adam/Documents/FileSync的批處理和日志文件/定期同步.app/Contents/MacOS/applet</string>,定期同步.app是上文將AppleScript保存成應(yīng)用程序生成的東西,/Contents/MacOS/applet照抄[5]。
  • <key>Weekday</key><integer>0</integer>表示星期天,<key>Hour</key><key>Minute</key>就分別表示幾點幾分了。
  • 保存成com.adam.foldersync.plist將其放入~/Library/LaunchAgents——此為用戶自定義任務(wù)項的目錄。

最后一步,擰緊發(fā)條,定時任務(wù)啟動!

在Mac的終端輸入launchctl load ~/Library/LaunchAgents/com.adam.foldersync.plist,便啟動了這個任務(wù)。
可以輸入launchctl list查看你的任務(wù)是否在列表里,如果在的話,就成功一半了,之后就查看/Users/Adam/Documents/FileSync的批處理和日志文件/中的日志來看執(zhí)行情況吧。

我的plist已加載

尾聲

當(dāng)初執(zhí)意要換上Mac就是因為聽說Mac OS下工作(我白天的職業(yè)環(huán)境是Windows,所以這里不談Microsoft Office生產(chǎn)力等)的效率高,買回來之后我也就秉承著這個提高效率的執(zhí)念去研究著玩,確實也依靠Automator實現(xiàn)了一些。以前玩Windows的時候還沒深入到自己變成的地步,所以不知道Mac OS比Windows效率高到底是真是偽,看客要是有想法敬請交流。

最后,文章轉(zhuǎn)載請注明出處。(雖然我知道沒人會轉(zhuǎn)的)


  1. 當(dāng)然了,TimeMachine也能達(dá)到這個目的,但是移動硬盤處的文件夾我需要上傳至網(wǎng)盤再做一次備份。 ?

  2. 對于Mac OS 10.11之前叫AppleScript編輯器 ?

  3. 完整文檔可參見AppleScript Programming ?

  4. 文件處理的詳細(xì)參見AppleScript學(xué)習(xí)筆記(五)文件夾,文件和路徑 ?

  5. 此處參考了Mac OS X下使用launchctl定時啟動AppleScript腳本。 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容