Pirsyncd

right|300px
pirsyncd stands for: Python Inotify Rsync Daemon.
This is an attempt of writing a daemon to watch a directory for kernel’s inotify events and then execute an rsync command to synchronize two different directories (local or remote). This is a poor man’s mirroring or an alternative (not so) real data replication mechanism and it is based on Pyinotify.
Features:
Some of the features of the pirsyncd:
*There is no need of installation!
*Run as a Daemon
*Can run as a Daemon in foreground
*Simple Configuration, you only have to configure your source and destination directories
*Configuration Check at the begging
*Ability to check and stop the daemon
*Syntax help with ––help
*For every parameter there is a usage examples with ––examples
*Support multiple running instances
*Mirroring to a remote (destination) server (needs password-less connection) through ssh connection
*Mirroring to a remote (destination) server (needs rsync password-file) through rsync connection
*Error handling via exceptions
*A customized delay for mirroring directories (dont rsync asap when an event is trigged)
*Gets arguments from command line - there is no need of hack the code.
*Synchronization at start (mirroring via rsync) - first run
*Definition of rsync version from command line
*Logging functionality of rsync process
*Partial rsync functionality
*Append rsync functionality
*Functionality to exclude files larger than MAX-SIZE or smaller than MIN-SIZE
*Debugging pyinotify events
*Debugging rsync command
*Autolearning new subdirectories
*Rsync & Pyinotify exclude pattern
*Resolving duplicates inode events for multiple files/events
*You can rsync every n (NUMBER) inode events (simple delay method)
*Supports python3 with pirsyncd.Py3k
*Pyinotify version 0.9.0 (20100604)
*Clean code and python code styling using pylint
*7.50 with pylint (previous 7.38) !
*Lines of code (has a lot of comments !) and it is written on KISS principle egrep -vc '#|^$' pirsyncd
 407
pirsyncd monitors for these inotify events:
*IN_ATTRIB
*IN_CLOSE_WRITE
*IN_CREATE
*IN_DELETE
*IN_MODIFY
*IN_MOVED_TO
*IN_MOVED_FROM
*IN_DELETE_SELF