当前位置: 首页 > 工具软件 > fswatch > 使用案例 >

mac fswatch+rsync 实时同步远程文件

刘承运
2023-12-01

远程实时同步文件  linux  上有inotify+rsync,mac上可以用fswatch+rsync

首先mac上通过包管理器brew 安装fswatch brew install fswatch,没有brew的自行去安装brew

有可能下载不下来fswatch,因为brew默认访问的https,对于这种情况,可以先

brew --cache (没有装xcode的还是装下吧) 找到brew的包下载缓存路径 /Library/Caches/Homebrew 

然后根据brew install fswatch命令中输出的 现在路径 自己去浏览器下载,修改https为http(没有vpn翻墙的还是翻下吧),下载下来是个tar.gz的包

把下载下来的fswatch复制到 /Library/Caches/Homebrew 中,注意要保持文件名与之前brew install fswatch中输出的文件名一致

否则brew install找不到缓存包又会去下载,然后死循环。。。。


mac自带了rsync工具,我们可以直接使用,同时可以通过脚本控制后台运行,实时监控,我的脚本如下,仅供参考

#!/bin/zsh

fswatch /Users/joker/joker/ | while read file

do

rsync -rltzuq --delete --exclude='.*' /Users/joker/joker/ 10.13.130.70::mmm/

echo "${file} was rsynced" >> /usr/local/var/log/rsync.log 2>&1

done

很简单吧 几句话搞定,我的shell是zsh,如果是用的bash可以改成bash,后面的echo语句是记录日志用的

这里有一个需要注意的地方,确定fswatch 和 rsync命令所在的文件夹 在你shell的配置文件中,我的在~/.zshrc里面

export PATH=/usr/local/bin:/usr/local/sbin:$HOME/bin:/usr/local/bin:$PATH


/User/joker/joker/ 是我需要同步的本地文件

10.13.130.70 是我的远程机器

mmm/ 是我远程机器(linux操作系统)上 /etc/rsync.conf里面定义的模块

贴上rsync.conf的配置

uid = root

gid = root

use chroot = no

max connections = 10

strict modes = yes

log file = /data1/v5.weibo.cn/logs/rsyncd/rsync.log

pid file = /var/run/rsync.pid

[www]

path = /data1/v5.weibo.cn/code/

comment = analyse

read only = false

hosts allow = *

[ttt]

path = /data1/weibo.cn/code/

comment = analyse

read only = false

hosts allow = *

[aaa]

path = /data1/v5_admin/

comment = analyse

read only = false

hosts allow = *

[mmm]

path = /data1/joker/code/

comment = analyse

read only = false

hosts allow = *


看到里面的mmm模块没,path里面的路径就是需要同步的远程机器中的文件夹,我的host allow = * ,所有机器都可以访问,如果需要安全点的话就设置host deny = * 

然后在host deny上面另写一行 host allow = 你允许的远程ip


今天配置的时候遇到一个坑,脚本文件里面的rsync命令中 文件路径写成了 /User/joker/joker  joker后面没有加/ 

然后各种同步不到,查两边日志都正常,差点崩溃,后来细看才发现这个问题,如果没有加/的话,默认就是去同步远程机器 /data1/joker/code/ 里面的code文件夹

很明显一万年也不会找到,加了/之后就是同级了,同步本机/User/joker/joker/code/下的所有文件和文件夹  


至于rsync的参数,网上一堆,可以根据自己的需要去配置。

 类似资料: