What is the simplest way to unidirectional incremental syncing of a folder present on a Linux system.

+1 for using the command line. +2 for not using rsync (Seems to have some problems on my system.)

  • 3
    What exactly are your problems with rsync? – innaM Jul 17 '09 at 9:51
  • 5
    Since rsync very likely is the simplest answer, explain what problems you're having with that. (The problems may spill over to any other solution, anyhow.) – Telemachus Jul 17 '09 at 10:37
  • Necro, yes, but: sshfs may also work for anyone looking at this question. – IronEagle Apr 18 '19 at 19:15

csync is a file synchronizer especially designed for you, the normal user.

csync is a library and ships commandline client by default. It is server-less and allows synchronisation through either sftp or samba.

Usage examples:

csync /home/csync smb://csync:secret@rupert.galaxy.site/Users/csync
csync /home/csync sftp://csync@krikkit.galaxy.site:2222/home/csync
  • The csync command is provided by the csync-owncloud ubuntu package. (sudo apt-get install csync-owncloud libcsync-plugin-sftp libcsync-plugin-smb if you want them as well) – ThorSummoner Jul 21 '15 at 20:08
  • So this runs a one-time synchronization on demand. I haven't found any information on how to use this for monitoring and continually synchronizing a directory. – ThorSummoner Jul 21 '15 at 20:10

I think you should solve your problems with rsync, that is the tried and true" syncronization tool for unixes.

rsync -uav --delete /loal/path example.com:/remote/path

Note: For bidirectional sync, you can use unison as well as csync.

  • +1, but this was only a partial answer for me. If you need to use rsync over ssh, use rsync -uav --delete -e ssh remoteuser@remotehost:/remote/dir /this/dir/ – zelanix Jul 14 '14 at 14:44

This is how I would do a unidirectional sync with bare tools.

At the onset, tar the entire set of files and copy them to the destination point.
Also, setup a marker in the base directory.

touch /Source/base/directory/last-sync-time.txt

Now, we want to keep sync'ing from Source to Destination.

At the next time slot for syncing forward (from Source to Destination),

# The backup script
cd /Source/base/directory
tar cfj -N ./last-sync-time.txt backup.tar.bz2 .
scp backup.tar.bz2 user@backup-server:/Backup/Directory/
touch /Source/base/directory/last-sync-time.txt
rm -f backup.tar.bz2
  1. The -N ./filename tells tar to archive only files modified or created after filename was modified/created.
    • Using a local reference for time confirms you make no mistake; if a backup was not taken for some reason, the next one will accumulate it
    • You can setup this script as a cronjob entry on the Source machine
    • I am assuming you will use scp with public key authentication
    • Also assuming you can reach the backup-server whenever this script is issued.
    • To be safer, you can add checks for confirming backup was stored and then, issue the touch command
    • You can choose to also insert commands to expand the backups overlaying them over previous ones at the Destination point; Or, keep incremental tar.bz2 archives.

I Use this short script for monitoring and continually synchronizing a directory with remote sftp folder;

 while inotifywait -qqre modify "$dir1";
    csync /home/user/folder sftp://remoteuser:remotepass@remoteaddress:remoteport/remotefolderpath

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.