您的位置:首页 > 其它

OS X使用fswatch+rsync自动检测文件夹改动并同步

2016-02-21 22:59 567 查看
Linux下面可以使用http://linux.die.net/man/1/inotifywatch (inotify-tools包)来进行文件夹、文件变更的检测

fswatch是一个使用Mac OS X FSEvents API的同步工具,同时也可以使用在BSD 与Debian操作系统 Mac FSEvent Api Doc

安装:

# MacPorts
$ port install fswatch

# Homebrew
$ brew install fswatch

命令行使用:
直接执行命令

fswatch ~/Downloads/a/

即可监控 ~/Downloads/a/,当文件内容变化时,输出变动的文件列表

简单的bash使用,fswatch监听变动后,执行rsync语句

#!/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会执行上百次。所以不能改变一个文件就同步一次

#!/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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: