我需要在 OSX 上同步两个目录。我发现这篇文章推荐使用 unison。
我试过unison,似乎可以很好地同步两个目录。但它不会自动进行同步(当有任何变化时,始终保持两个目录同步)。
因此,我想为了实现我的目的,应该将 unison 与一个触发器一起使用,该触发器将观察变化并通知 unison 完成其工作。
但是怎么做呢?有什么推荐和教程吗?
我需要在 OSX 上同步两个目录。我发现这篇文章推荐使用 unison。
我试过unison,似乎可以很好地同步两个目录。但它不会自动进行同步(当有任何变化时,始终保持两个目录同步)。
因此,我想为了实现我的目的,应该将 unison 与一个触发器一起使用,该触发器将观察变化并通知 unison 完成其工作。
但是怎么做呢?有什么推荐和教程吗?
Unison 内置了此功能。只需将该行添加repeat = watch
到您的 Unison 配置文件中。
安装齐声:
brew install unison
安装 unox:
git clone git@github.com:hnsl/unox.git
cd unox
ln -s $PWD/unox.py /usr/local/bin/unison-fsmonitor
进行初始同步:
unison -auto -batch dirA dirB
运行连续双向同步:
unison -auto -batch -repeat watch -times dirA dirB
我找到了用于查看目录中内容更改的 npm 模块fsmonitor
。
首先,我编写了一个小脚本来同步我想要的文件夹,例如:
unison -auto -batch dirA dirB
unison -auto -batch dirB dirA
在 global: 中安装npm install -g fsmonitor
模块
在 shell 中运行命令:fsmonitor -d <the dir> <sync script>
.
然后目录发生任何变化,都会执行同步脚本,两个目录就会同步。
在.unison目录repeat = watch
中的 unison 配置文件中使用可以解决问题。(我在 Ubuntu 18.04 上试过)
第 1 步,编辑 unison 配置文件,$HOME/.unison/example.prf
root = /tmp/data1
root = /tmp/data2
path = shared
repeat = watch
第二步,开始同调
$ unison example
第三步,在任一根目录下创建一个文件,它会自动同步同步到另一个根目录。
$ touch /tmp/data1/shared/1.txt
$ ls /tmp/data2/shared/
-rw-r--r-- 1 user1 user1 0 Mar 26 16:25 1.txt
附录
sudo apt-get install unison
repeat = watch
,您需要unison-fsmonitor
$ curl -L -o unison-fsmonitor https://github.com/TentativeConvert/Syndicator/raw/master/unison-binaries/unison-fsmonitor
$ which unison
/usr/bin/unison
$ sudo cp unison-fsmonitor /usr/bin/
$ sudo chmod +x /usr/bin/unison-fsmonitor