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