mac中的是:fswatch,fsevents-tools。bash
inotifywait [參數] [events] [targetDir]socket
平時 inotifywait 會掛起在那裏,直到文件/目錄發生了要引發關注的事件後,它會退出並輸出事件發生的場所、事件的名稱以及引發事件的文件(當事件發生在目錄上時纔會輸出).工具
inotifywait 最經常使用的選項有兩個:spa
-r 表示遞歸監控子目錄中文件發生的事件code
-e 指定要監控的事件列表。blog
對於備份系統來講,只須要監控 modify、create和delete三種事件就好了。遞歸
inotifywait -r -e modify,create,delete /tmp事件
表示監控 /tmp 目錄及其子目錄中文件修改、文件建立和文件刪除三種事件。get
rsync [參數] [原目錄] [目標目錄]同步
rsync是一款快速增量備份工具。它的具備如下幾個特色使得它很適合用做作備份的工具:
增量備份,只會傳輸修改過的內容
能夠在傳輸過程當中實時解壓縮,減小帶寬消耗
能夠保持原來文件的權限、事件、軟硬連接
即支持本機複製,也支持遠程複製
-a 表示archive mode,即備份目錄下的全部內容(包括子目錄中的內容),而且保持軟連接、文件屬性、文件修改事件、文件的全部者和宿主信息不變,而且同步字符/塊設備以及命名socket和fifo等特殊文件。
-v 表示輸出備份的詳細信息
-z 表示傳輸時進行壓縮
–delete 刪除目標目錄中源目錄中沒有的文件
rsync -avz --delete src/ foo:/data
src/ 表示要備份的是src目錄下的全部內容,注意這裏最後的 / 不能去掉,不然會把src目錄自己備份過去
foo:/data 表示備份的目的地是foo主機下的 /data/ 目錄
用個 while 死循環把兩個工具整合起來
#!/bin/bash if [[ $# -ne 2 ]];then cat<<EOF Usage $(basename $0) source_dir [host:]dest_dir EOF exit 0 fi source_dir=$1 dest_dir=$2 while : do inotifywait -r -e modify,create,delete ${source_dir} && rsync -avz ${source_dir}/ ${dest_dir} --delete done