如何在文件修改时触发 rsync?

Bla*_*orp 20 virtualbox rsync shared-folders vagrant

我可以用 同步文件夹rsync -avz /directory /target,现在我希望如果我更改了一个文件,/directory那么rsync应该自动调用它。

我正在使用 Virtual Box 并且 Virtual Box 的共享文件夹真的很慢,特别是如果您有一个使用共享文件夹作为文档根目录的网页。随着rsync我将能够工作与我的共享文件夹中的本地文件与文档根目录自动同步它。

我希望有人知道怎么做,crontab这不会很好,因为它每 x 分钟执行一次,所以如果我什么都不做,它仍然会调用,rsync但如果我修改了我的文件,它仍然会调用。

此致

Oli*_*Oli 20

crontab 会不好,因为它每 x 秒/分钟执行一次,所以如果我不做任何事情,它仍然会调用 rsync 但如果我修改了我的文件,它不会

rsync只会同步已更改的文件。如果没有任何变化,它将退出。这确实是一个最小的开销。

如果您对此不满意,可以使用inotifywait

while inotifywait -r /directory/*; do
    rsync -avz /directory /target
done
Run Code Online (Sandbox Code Playgroud)

这将更加即时,但每次保存时它都会做一些事情。


Ari*_*ion 7

您可以使用Lsyncd(实时同步守护程序)

Lsyncd 监视本地目录树事件监视器接口(inotify 或 fsevents)。它聚合和组合事件几秒钟,然后生成一个(或多个)进程以同步更改。默认情况下,这是 rsync。因此,Lsyncd 是一种轻量级的实时镜像解决方案,安装相对容易,不需要新的文件系统或块设备,并且不会影响本地文件系统的性能。

例如,这里是Ubuntu 16.04教程


sil*_*gon 6

您可以使用inotifywaitrsyncinotifywait启用该事件modify,create,delete。这样,您将仅在文件更改时与服务器同步,否则每当读取文件时都会同步(编辑器会多次读取文件以检查是否有任何更改)。故曰:

while inotifywait -r -e modify,create,delete /directory; do
    rsync -avz /directory /target
done
Run Code Online (Sandbox Code Playgroud)