fswatch 的基礎使用git
fswatch 和其餘命令連用github
fswatch 能夠用來監測一個 path 下的文件變更事件。shell
最簡單的 fswatch .
:segmentfault
$ fswatch . /Users/clip/test/fswatch/hello /Users/clip/test/fswatch/hello-fswatch /Users/clip/test/fswatch/hello-fswatch /Users/clip/test/fswatch/hello-fswatch
上面的幾行輸出分別是在下面的新建、編輯、刪除操做以後產生的。code
$ touch hello $ touch hello-fswatch $ echo hhh > hello-fswatch $ rm hello-fswatch
用時候想在檢測到文件變更以後執行某些操做,好比檢測到變化以後觸發 rsync 來同步文件。事件
0.x 版本的時候 fswatch 支持 fswatch path [paths] program
,可是 1.x 的時候由於一些緣由取消了這個支持,這樣能夠用 pipe 來實現一樣的效果。ip
$ fswatch -0 [opts] [paths] | xargs -0 -n 1 -I {} [command]
另外爲了適配以前的用法,通常安裝 fswatch 的時候都會附加一個 fswatch-run 的 script,關鍵內容以下:get
fswatch -o ${=*[1,-2]} | xargs -n1 -I{} ${=*[-1,-1]}
其實就是把 fswatch-run 接受的最後一個參數前的全部參數交給 fswatch 做爲 path,剩下的最後一個參數交給 xargs 來執行。同步
fswatch 的 -o
使得輸出只是一個表明文件變化數的數字,${=*[1,-2]}
則是指的全部參數(*
)的第一到倒數第二個([1,-2]
)。
xargs 原本是把從標準輸入的內容當作參數來用,但其實這裏它並無這麼作,首先 -n 1
已經只接受一個參數,而後 -I{}
又把惟一的一個參數給替換成空的了,最後 ${=*[-1,-1]}
來執行最後的一個參數。附上 shell args op 的小實驗。it
假設本身有自定義的需求也能夠對應的去作一些修改,好比像這麼用:
$ fswatch-run ~/dev/xxx rsync-to-dev ~/dev/xxx /home/xxx/project/xxx/
那麼就能夠本身寫一個 fswatch-run:
fswatch -o ${=*[1,2]} | xargs -n1 -I{} ${=*[2,-1]}
參考: