Ugly Stool Rotating Header Image

January 1st, 2012:

In Search of rsync for Windows

I like almost everything about rsync.  The efficiency employed when transferring files, the mind-numbing command line options for just about every situation, the ability to work over a pipe, and network synchronization.  The biggest fail is the lack of native Windows support.  Syncing files is not solely relegated to UNIX, so anytime I have two directories to synchronize I shake my fists at the heavens,  “O rsync, rsync, wherefore art thou rsync!”

There are alternatives to rsync on Windows, and I use some of them with various levels of success.  I actually think the tools are fine, and work quite well.  The problem is me, I want to use these tools as if they were actually rsync, and they are not.

Sync Toy

Microsoft provides the free program SyncToy.  It can synchronize two directories, and works well.  It is not quite rsync because…

  1. Must define the directory pairs upfront through a UI.
  2. Leaves debris on the file system that contains records of the data moved between the two directories.
  3. The real power of this tool feels obscured by the UI. 

The latest version of SyncToy (2.1) greatly improves upon previous versions.  I setup jobs, and run them every now and again.

Robocopy

Robocopy is a command line utility to copy files.  It should be available in the default OS install, so if you have Windows it is there.  Robocopy supports mirroring two directories.

Create a backup up My Pictures – save all of the images (*.jpg fies) to my portable USB drive E:.

cmd> robocopy “My Pictures” E:\backup\pictures /MIR *.jpg

Create a backup up My Pictures to my NAS device.  Create a record so if the transfer if interrupted it can be automatically resumed.

cmd> robocopy “My Pictures” \\nas\backup\pictures /MIR /Z *.jpg

Robocopy has lots more options too.  One can do multi-threaded copy, bandwidth throttling, just create directory tree and file names (no data), etc.  Well worth a look for the CLI inclined.

Duplicati

Duplicati is a reimplementation of duplicity for Windows.  They are both great backup utilities, but not exactly what I want.  I mention them because Duplicati’s author created an rsync library for C#.  This library would be a great starting point for a Windows rsync implementation.

There are other rsync library available such as librsync, and rsync.net.  I like the idea of Duplicati’s because it is attached to an actively maintained and working application.  Start reading the source too see the implementation.

In the end it was me, not rsync.  I think the tooling on Windows is more than sufficient to do what I want – mirror two directories.  I leave the door open for experimentation.  I may write my own synchronization tool to bring a few more of the rsync-like abilites to Windows natively.  SyncToy is built upon a publicly available API, and Duplicati provides an OSS .NET rsync library too, so who knows.

Page optimized by WP Minify WordPress Plugin