How do I trigger rsync on file modification?
crontab would be not good, cause it is executed each x seconds/minutes, so if i dont do anything, it will still call rsync but not if i modified my file
rsync
will only sync the files that have been changed. If nothing has changed, it will exit. That's really a minimal overhead.
If you're unhappy with that you could use inotifywait
:
while inotifywait -r /directory/*; do
rsync -avz /directory /target
done
That will be more instant but it will do things every time you save.
You could use Lsyncd (Live Syncing Daemon):
Lsyncd watches a local directory trees event monitor interface (inotify or fsevents). It aggregates and combines events for a few seconds and then spawns one (or more) process(es) to synchronize the changes. By default this is rsync. Lsyncd is thus a light-weight live mirror solution that is comparatively easy to install not requiring new filesystems or block devices and does not hamper local filesystem performance.
Here is for example a tutorial for Ubuntu 16.04.
You can use inotifywait
and rsync
. inotifywait
with the event modify,create,delete
enabled. This way you will synchronize with your server only when the file changes, otherwise it will sync whenever a file is read (editors read several times your file to check if there are any changes). Thus said:
while inotifywait -r -e modify,create,delete /directory; do
rsync -avz /directory /target
done