OS X使用fswatch+rsync自動檢測文件夾改動並同步

Linux下面能夠使用http://linux.die.net/man/1/inotifywatch (inotify-tools包)來進行文件夾、文件變動的檢測html

fswatch是一個使用Mac OS X FSEvents API的同步工具,同時也能夠使用在BSD 與Debian操做系統 Mac FSEvent Api Doclinux

安裝:git

# MacPorts
$ port install fswatch

# Homebrew
$ brew install fswatch

命令行使用:
直接執行命令github

fswatch ~/Downloads/a/

便可監控 ~/Downloads/a/,當文件內容變化時,輸出變更的文件列表bash

簡單的bash使用,fswatch監聽變更後,執行rsync語句hexo

#!/bin/bash

fswatch /Users/kint/Downloads/a | while read file
do
    echo "${file} was changed start sync..."
    rsync -avzrp /Users/kint/Downloads/a/ /Users/kint/Downloads/b

done
}

以上腳本能夠正常執行,可是有個BUG,就是在同步過程當中,若是刪除或者添加了一個文件夾,裏面有上百個文件,那麼就會致使do...done會執行上百次。因此不能改變一個文件就同步一次app

#!/bin/bash
function start_moniting()
{
    #確保在上次經過過程當中改變文件可以同步
    sync_files
    echo "start morniting folder......"
    fswatch -1 /Users/kint/Downloads/a

    # 5秒後執行同步
    sleep 5
    sync_files
}

function sync_files()
{
    echo "start sync_files"
    rsync -avzrp /Users/kint/Downloads/a /Users/kint/Downloads/b
    #開始檢測
    start_moniting
}

sync_files

以上腳本比較適合用於Blog更新上傳,在本地經過hexo等生成靜態博客發佈到github pages。ide

相關文章
相關標籤/搜索