Hello fswatch

TOC

  • fswatch 的基礎使用git

  • fswatch 和其餘命令連用github

hello fswatch

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]}

參考:

相關文章
相關標籤/搜索