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

我可以使用rsync -avz /directory /target同步文件夹,现在我希望这样做,如果我更改/directory的文件,那么应该自动调用rsync

我使用Virtual Box并且Virtual Box的共享文件夹非常慢,特别是如果您有一个使用共享文件夹作为文档根目录的网页。 使用rsync我可以使用共享文件夹上的本地文件,并自动与文档根目录同步。

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

最好的祝福

crontab会不好,因为它每x秒/分钟执行一次,所以如果我什么都不做,它仍会调用rsync但是如果我修改了我的文件则没有

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

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

 while inotifywait -r /directory/*; do rsync -avz /directory /target done 

这将更加即时,但每次你节省时它都会做。

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

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

这是Ubuntu 16.04的教程 。

您可以使用inotifywaitrsyncinotifywait用事件modify,create,delete启用。 这样,只有在文件更改时才会与服务器同步,否则无论何时读取文件都会同步(编辑器会多次读取文件以检查是否有任何更改)。 如此说:

 while inotifywait -r -e modify,create,delete /directory; do rsync -avz /directory /target done