需求情景
我在Mac上有好幾個(gè)分散在各處的文件夾需要備份到移動(dòng)硬盤上棉磨,而且最好是增量備份的方式以節(jié)約時(shí)間呢蛤。[1]需求如下:
- 每個(gè)文件夾需要分開各自備份雁社。
- 能定時(shí)自動(dòng)備份最好置济。
解決方案
基礎(chǔ)軟件
FreeFileSync
顧名思義所坯,免費(fèi)的文件同步軟件谆扎。官方自帶簡(jiǎn)體中文。
界面如圖芹助,與知名文件同步軟件GoodSync(它在Mac端搜不到破解版囧)感覺功能上也相當(dāng)堂湖,都能一目了然地看到文件夾&文件之間的區(qū)別∽赐粒可能區(qū)別在同步算法上吧无蜂,不過我這種輕量用戶也不在乎。
這個(gè)軟件有個(gè)很好的功能就是能創(chuàng)建同步的批處理蒙谓,把兩側(cè)的文件夾斥季、同步的方向設(shè)定好,直接存為一個(gè)后綴為
ffs_batch
的文件累驮,打開這個(gè)文件就能自動(dòng)完成同步酣倾。還可以選擇當(dāng)出現(xiàn)錯(cuò)誤、完成時(shí)如何進(jìn)行谤专,以及日志保存的位置躁锡。
進(jìn)階技巧
由于我上述的需求,我需要自己寫一些腳本程序來實(shí)現(xiàn)了置侍。
自動(dòng)運(yùn)行多個(gè)批處理映之,借助AppleScript
激活Spotlight搜索,輸入腳本編輯器[2]以打開蜡坊。
小注:我之前對(duì)AppleScript[3]完全不了解杠输,以下還是我寫的第一個(gè)小腳本。在我有限的理解里秕衙,AppleScript與操作系統(tǒng)高度集成抬伺,可以更方便地直接對(duì)系統(tǒng)進(jìn)行操作。
而這次我們只需要用到打開文件[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里的某個(gè)程序來做峡钓,tell application "Finder"
就是打開Finder了。 -
open
是打開文件夾或文件若河,有人會(huì)問“我不知道路徑在AppleScript里怎么表達(dá)怎么辦呢能岩?”,有下圖的人性化方案萧福。
敲入命令choose file
拉鹃,以某文件為例:
點(diǎn)擊選取之后就會(huì)出現(xiàn)alias "Macintosh HD:Users:Adam:Library:Mobile Documents:com~apple~ScriptEditor2:Documents:未命名.scpt"
的字樣,這些就是輸入open
之后的東西了。 -
delay
的作用是延緩下一步執(zhí)行膏燕,因?yàn)槊看螆?zhí)行一個(gè)批處理都要花一點(diǎn)時(shí)間钥屈,因此如果不讓程序暫停,則會(huì)出錯(cuò)坝辫。 -
display notification
顧名思義篷就,寫個(gè)通知告訴我腳本運(yùn)行了。
腳本寫好之后可以將其保存成可直接執(zhí)行的應(yīng)用程序近忙,第一步就大功告成了竭业。
創(chuàng)建任務(wù)描述文件.plist
實(shí)現(xiàn)定時(shí)自動(dòng)功能
同樣這是我第一次接觸.plist
,更詳細(xì)的可見Mac下添加定時(shí)任務(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>
<!-- 要運(yùn)行的程序 -->
<key>Program</key>
<string>/Users/Adam/Documents/FileSync的批處理和日志文件/定期同步.app/Contents/MacOS/applet</string>
<!-- 運(yùn)行時(shí)間 -->
<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)錯(cuò)誤輸出文件 -->
<key>StandardErrorPath</key>
<string>/Users/Adam/Documents/FileSync的批處理和日志文件/run-err.log</string>
</dict>
</plist>
-
<string>com.adam.foldersync</string>
是我給這個(gè)任務(wù)起的名字 - 對(duì)于
<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>
就分別表示幾點(diǎn)幾分了攘残。 - 保存成
com.adam.foldersync.plist
將其放入~/Library/LaunchAgents
——此為用戶自定義任務(wù)項(xiàng)的目錄炕桨。
最后一步,擰緊發(fā)條肯腕,定時(shí)任務(wù)啟動(dòng)献宫!
在Mac的終端輸入launchctl load ~/Library/LaunchAgents/com.adam.foldersync.plist
,便啟動(dòng)了這個(gè)任務(wù)实撒。
可以輸入launchctl list
查看你的任務(wù)是否在列表里姊途,如果在的話,就成功一半了知态,之后就查看/Users/Adam/Documents/FileSync的批處理和日志文件/
中的日志來看執(zhí)行情況吧捷兰。
尾聲
當(dāng)初執(zhí)意要換上Mac就是因?yàn)槁犝fMac OS下工作(我白天的職業(yè)環(huán)境是Windows,所以這里不談Microsoft Office生產(chǎn)力等)的效率高负敏,買回來之后我也就秉承著這個(gè)提高效率的執(zhí)念去研究著玩贡茅,確實(shí)也依靠Automator實(shí)現(xiàn)了一些。以前玩Windows的時(shí)候還沒深入到自己變成的地步其做,所以不知道Mac OS比Windows效率高到底是真是偽顶考,看客要是有想法敬請(qǐng)交流。
最后妖泄,文章轉(zhuǎn)載請(qǐng)注明出處驹沿。(雖然我知道沒人會(huì)轉(zhuǎn)的)
-
當(dāng)然了,TimeMachine也能達(dá)到這個(gè)目的蹈胡,但是移動(dòng)硬盤處的文件夾我需要上傳至網(wǎng)盤再做一次備份渊季。 ?
-
對(duì)于Mac OS 10.11之前叫AppleScript編輯器 ?
-
完整文檔可參見AppleScript Programming ?
-
文件處理的詳細(xì)參見AppleScript學(xué)習(xí)筆記(五)文件夾朋蔫,文件和路徑 ?