监听FSEvents事件自动同步文件夹

自从用上了Sublime Text2,对Netbeans就各种不爽,内存占用高,打开慢,要装虚拟机。

对于运行环境在公共服务器上的同学来说,Netbeans可以和ftp自动同步很重要,在windows下可以通过Winscp解决,Mac下一直没找到一个好的文件夹自动同步工具,所有FTP工具都是同步,没有自动同步的功能,于是只好继续用Netbeans。

原来公司的同事有一个解决办法,Mac监控文件夹变化并同步,通过rsync与服务器同步,监控的部分通过定时的方式完成,由于rsync实现方式极为巧妙(通过文件块的方式判断文件变化,只传输必要的文件块达到更新的目的),因此这个方案不会占用太多带宽,是可行的。不过不管文件有没有变化,每隔几秒钟和服务器通信一下,依然不是一个那么完美的方式。

曾经琢磨过自己写一个同步的app,监控文件夹变化,然后同步文件,可惜到现在没搞定。这几天研究Mac的文件夹改变监控接口FSEvents API 时,在Github上发现了fswatch,可以通过FSEvents接口监控指定文件夹。再通过rsync同步文件夹。

先编译出可执行文件(需要安装Xcode且安装Command Line Tools),然后建立一个脚本方便运行。

对作者给出的脚本做了些简化,简化后的内容如下:

#!/bin/sh ./fswatch $1 "date +%H:%M:%S && rsync -iru --delete --exclude='.*' $1 $2"

rsync的参数里,i表示显示同步详情,r表示目录递归,u表示按更新文件的方式同步,--exclude='.*'表示忽略所有隐藏文件

运行方式:将脚本和编译出来的可执行文件fswatch放在一个目录下,执行

./sync /target/to/local/foo/ user@remote:target/to/remove/foo/

为了可以将所有的终端窗口关掉,我会开一个screen执行它

可执行文件和脚本都打包放在附件里

fswatch-master

标签: none

添加新评论