A comparison of file synchronisation software

This is my biased comparison of the following free software for local file
synchronisation: FreeFileSync, SyncToy, Create Synchronicity, cwRsync, WinRoboCopy, Unison, DirSyncPro and Synkron.

TL;DR: FreeFileSync is the best of the bunch, especially for two-way sync.

Given uncapped internet and money to spare, Dropbox would be an excellent all-round solution that puts your files on every computer you use and keeps them all in sync, and lets you recover deleted files.    I also use Google Drive for for document storage: word processing, spreadsheets and PDFs.   However, for those of us with multiple computers, need for backups, and caps on our home internet connection, there remains a requirement for offline software to synchronise camera photos, videos and other large files.


FreeFileSync does 1-way mirror and 2-way sync.  For 2-way sync it builds a hidden ".sync.ffs_db"
database in each root that enables it to speed up sync when files have been renamed, and determine in which direction to sync new or deleted files. The UI makes it easy to specify entire subfolders to sync to the right or left or exclude temporarily.  FreeFileSync is a C++ app cross-platform for Win, Mac and Linux.  It loads huge directories (100,000+ files) easily.

Tip: to sync a tree of symlinks, set "Symbolic Link Handling" to "Follow" under the "Compare" gear-icon.  If part of the tree has complex changes coming from both sides, it's worth using the "temp exclude" feature to focus down to the tricky part and tweak the direction choices.

Cons: No biggies, but there's a learning curve for discovering the features.  FFS is not fully automatic - it's worth checking the sync preview in case of conflicting changes on both sides.


SyncToy is a popular older offering, fast and simple to use.  It creates a SyncToy_{GUID}.dat database file in the root of each folder.

Cons: SyncToy throws errors on junctions and directory links. It's Windows only and was last updated in 2009. The SyncToy_*.dat files in the sync roots are annoying to look at.  2-way sync works but the 1-way sync "Echo mode" does not restore files that were deleted on the destination so I can't recommend it for more than simple 2-way sync situations.

Create Synchronicity

Create Synchronicity is a tiny VB.Net app (230kb) with a simple user interface.  It handles symlinks and junctions and compares up to 4000 files per second.

Cons: excluding files and folders gets finicky because excludes are defined in a single text box, and regex exclusions didn't work for me.  Although it "should" run on Mono, it crashes with System.TypeLoadException on Linux.

cwRsync and Grsync

Having used rsync on Linux for many years, I have naturally looked to GRsync and cwRsync on Windows to do my one-way backups.

Cons: cwRsync costs money past version 4.0.3, which has no GUI. GRsync has a GUI.  They both use Cygwin posix layer, and I find them very slow on Windows compared to native Windows apps.   It gives a "cannot traverse non-regular file" error for Windows junctions and directory symlinks.  You can sort-of do 2-way sync with rsync by running it twice but there's no easy way to pick and choose which side to favour in complex cases, so don't do it.  The ".rsync-filter" files get unwieldly if you sync different subsets to different destinations. For NTFS destination they write strange security settings on the files that prevent other Windows installations from easily accessing the files.


WinRoboCopy is a GUI frontend to robocopy, which is the closest Windows has to rsync as a built-in command.  Unlike cwRsync, it is robust and optimised for Windows directory links, junctions, encrypted data, remote shares and scheduled tasks.  It had the fastest transfer rates: 57MB/s over USB3.

Cons: Like rsync it's designed for 1-way sync only.


Unison provides reliable 2-way sync, maintaining databases for each root with file hashes and metadata needed to detect renames accurately.  It's an OCaml app with GTK UI.

Cons: due to hashing it's slow like molasses, only compares a few files per second, and it's several times slower running on Windows than on Linux.  It's ok up to a few hundred megs of data.  Tricky to run on Windows, as you have to install GTK+ separately.


DirSyncPro is a cross-platform Java app with the icon set of a QT app.  It traverses symlinks and junctions and it's "Job Sets" can sync multiple pairs of folders in one click.

Cons: The UI is cluttered and complex, with way too many steps to configure things. Analysis takes much longer than FreeFileSync. It's annoying to have to hover over the base filename to see the relative path. Filters are disabled except in 2-way "Synchronization" mode.


Synckron is a cross-platform QT App.  It appears to support N-way sync, not just 2-way.

Cons: Although it compares the files found under junctions and symlinks, it displays an error that it "cannot synchronise" them.

Coda: A few programs I've skipped over include JFileSync (last: July 2007), OneSync (windows-only, for sync via intermediate location), and Syncless (last: May 2010, focuses on real-time sync).

My Provisional Solution

My approach is to use mklink to create a tree of symlinks to the various folders that I want to sync, which means I can use one big sync job for everything and don't need lots of subfolder exclusions.  I've ruled out cwRsync, SyncToy and Synkron on Windows as they don't deal with symlinks.

For one-way synchronisation (mirroring) I recommend rsync on Linux and WinRoboCopy on Windows.

For two-way synchronisation, I recommend FreeFileSync because it's fast, usable, flexible and cross-platform.

Popular posts from this blog

Growing large crystals of Copper (II) Sulphate