Skip to main content

A comparison of file synchronisation software

A pair of green arrows suggesting a circle
Presenting a comparison a wide range of free software for local file synchronization. In my case, for synchronization between a PC and an external hard drive. [5 minutes]

I am not affiliated with any of the above software. I was hunting for a good file sync program for myself, and am now sharing my results.

Naturally if you have fast unlimited internet and always-connected devices and can afford DropBox, Google Drive or OneDrive then go ahead and use cloud storage. Those are some big "ifs" for South Africa in late 2012, where external USB drives remain the primary mode of moving gigabytes of data around. So, I tried a bunch of different local synchronizing tools to find one I liked best.

Spoiler Alert: I think FreeFileSync is the best of the bunch, especially for two-way sync.

File Synchronization Sofware


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.


Synkron 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.

My Recommendation

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

P.S. If you're avoiding syncing over the internet, you might be interested in these tips for minimizing bandwidth usage.

Any more recommendations for local file synchronization?


  1. Thanks! Very informative.

  2. By the way, with the current version of FreeFileSync you can sync more than one folder pair per "job", so it would seem you don't need to use mklink anymore...

  3. I almost downloaded the wrong program, until I read this. Thanks for the reviews and it looks like I will be using FreeFileSync!


Post a Comment

Popular posts from this blog

Optimize Wordpress for tiny free tier VMs

In which I show how to optimize Wordpress on Apache to handle a reasonable continuous load on a tiny free tier virtual machines, with only standard Ubuntu packages. [6 minutes]

The keys to doing long-form Narrative Improv

Here are some key ingredients for full-length improvised plays known as Narrative Improv. Providing tips on story structure, normalcy, the protagonist, consequences and clarity. [4 minutes]

How to write Bad Python

A controversial post about bad code that I observed on an unnamed Python project, in which I describe outdated idioms, Java-style code, and bad programming practices. [3 minutes]