我可以与同步文件夹rsync -avz /directory /target
,现在我希望如果我更改了文件就执行此操作,/directory
这样rsync
应该自动调用。
我正在使用 Virtual Box,Virtual Box 的共享文件夹真的很慢,特别是如果你有一个使用共享文件夹作为文档根目录的网页。有了它,rsync
我就能够使用共享文件夹中的本地文件,并自动将其与文档根目录同步。
我希望有人知道该怎么做,但这crontab
并不好,因为它每 x 分钟执行一次,所以如果我不做任何事情,它仍然会调用,rsync
但如果我修改了我的文件,它就不会调用。
此致
答案1
crontab 不太好,因为它每隔 x 秒/分钟执行一次,所以如果我不执行任何操作,它仍然会调用 rsync,但如果我修改了文件,它就不会调用
rsync
只会同步已更改的文件。如果没有任何更改,它将退出。这确实是一个最小的开销。
如果您对此不满意,可以使用inotifywait
:
while inotifywait -r /directory/*; do
rsync -avz /directory /target
done
这会更加即时,但它会做一些事情每一个节省的时间。
答案2
你可以使用Lsyncd(实时同步守护进程):
Lsyncd 监视本地目录树事件监视器接口(inotify 或 fsevents)。它会在几秒钟内聚合并组合事件,然后生成一个(或多个)进程来同步更改。默认情况下,这是 rsync。因此,Lsyncd 是一种轻量级实时镜像解决方案,安装起来相对容易,不需要新的文件系统或块设备,也不会影响本地文件系统的性能。
例如,Ubuntu 16.04 教程。
答案3
您可以在启用事件的情况下使用inotifywait
和rsync
。这样,您只会在文件更改时与服务器同步,否则每次读取文件时都会同步(编辑者会多次读取您的文件以检查是否有任何更改)。因此说:inotifywait
modify,create,delete
while inotifywait -r -e modify,create,delete /directory; do
rsync -avz /directory /target
done
答案4
稍微扩展一下对已接受答案的评论,我已经成功使用了样本触发将scp
更改的文件发送到客户机。在 Linux 上,这是一个包装器,inotify
但它也是跨平台的(我在 Mac 上安装了基于 Arm 的 QEMU 客户机)。我ssh
还添加了远程构建。推送方法非常适合行为不太理想的共享。