Total Commander Alternatives for Linux:

Comparing the best: Unison - Rsnapshot - Krusader

(c) 2011 by Brian Mork

Site Index | Wiki |Blog

Summary

If you like Total Commander for directory synchronization under the Windows operating system, Krusader is a good replacement.  Krusader "feels" like Total Commander, as a GUI overlay of various Linux tool-chain programs.  Unison is technically better, and propagates your work rather than files.   Unison is a pristine academic study in file synchronization. The Unison GUI is pretty simplistic but the underlying design is efficient.  For backup, Rsnapshot is invisible, efficient, and offers trivial file recovery options.

As of 2013, WINE has matured to the point where Total Commander can run on a Linux or Mac OS X computer, and share common data directories.

Rsnapshot is the best backup tool.
Krusader is an excellent familiar GUI tool to synchronize your files on two machines.
Unison is the best tool to synchronize your work on two machines.


Introduction

If you're not interested in the file synchronization /backup  capabilities, there are many TC alternatives.  For example, see  the 168hours blog entry on wordpress.com. For file synchronization and network versatility, there are very few alternatives available for a *unix operating system.  I have some recommendation to replace Total Commander under Linux that you might enjoy.

Unison

  unison-iconUnison mimics Total Commander left/right synchronization and intelligent determination of which way to propagate updates.  With the Unison GUI, you cannot designate a block of filenames with click and shift-click.  Instead, it allows only line by line adjustments instead of highlighting a block of filenames. Fortunately, it has single keystroke commands, so I just hold down the key and it quickly scrolls through a list of files.

Unison has a reather clunky procedure of creating required synchronization pre-canned profiles.  Welcome to *unix.  It's hard to set up the first time but it's very fast and powerful once it's stable.  I synchronize home directories on Windows, Linux, and Mac OS with special designation for directories or files that are not suitable to cross-fertilize (for example, I don't want to synchronize the .ssh directory, which holds my private encryption keys for each computer).  iTunes and iPods store files in different locations depending on the OS, so I also properly handle these directories.  Be sure to use the Shift-I, Shift-E, and Shift-N options of the Unison GUI, combined with the "addprefsto" configuration file option, to make this process easier.

Unison doesn't do remote sites with ftp.  Rsync and/or the graphical Grsync do a great job of file transfer, per se, and asymmetric backup.  Unison offers intelligent comparisons to determine which files should be synchronized.  Unison is very comfortable running through a secure socket shell (ssh) link, and that's how I use it to keep directories synchronized on my LinuxMandriva2009 - MacOS10.6 - WindowsXP home network.  Setting up Unison over ssh for Windows takes a few more steps because some of the tools are foreign to the Windows OS.  Over the ssh link, it works the same whether I'm on the road or sitting in my living room.  Unlike Total Commander or Krusader, Unison is unique (and dangerous) in that it is also capable of propagating more-recent file deletions.  Even more threatening is that if you are backing up to a USB hard drive, and then you run Unison with the drive disconnected, it determines that all the files have been deleted and will delete them all on your source drive!  This is so significant that there is a special configuration file option to avoid this situation (check the mountpoint parameter).  If you handle UNison wrong, and you'll propagate a lot of empty directory space.  Remember, it's not backup, it's synchronization.

I've discovered one nit-noid that I do not like about Unison.  It has a "time" parameter you can set true so that it will propagate time stamps on the files.  This turns out to be true only if the files are not different.  In otherwords, if the files have different times, Unison will look deeper and compare file content.  If file content is the same, then it will do nothing.  Two problems: 1) it takes a lot longer to compare directories because all the file contents are being compared, and 2) if only the time stamps are different, the time stamps are not synced.  This became a problem when working across time zones and I got a number of directories filled with file stamps that differed by 1 or 2 hours.  Solution: sync directories with Total Commander every once in a while, which will correct time-stamp-only differences.

Default Unison behavior is to copy empty directories.  Total Commander shows them, but does not tag them as something that needs synchronization to the other computer.

Additional references for Unison:

RSnapShot

  rsnapshot-iconRsnapshot is my favorite asymmetric backup utility.  It's a python script that uses the mirroring capability of rsync in a creative way.  It's invisible once it's set up, and makes it beautifully easy to recover files.  This is not about file synchronization.  Instead, it runs as a cron job in the background every hour.  It saves a certain number of hourly backups, a certain number of day backups, weeklies, monthlies, even yearly backups. Significantly, although it makes complete backup directory structure, it doesn't actual save the entire directory structure each time.  It only uses up disk space for the new files on each incremental backup.  And, if you're transmitting over a comm link, the rsync protocol efficiently sends only pieces of any file that has been changed. An operational tutorial for rsnapshot is on my wiki pages.  It's similar to the Mac OS Time Machine backup, except it uses spanning backups of different intervals rather than a FIFO scheme, deleting the oldest backup.

The real benefit of Rsnapshot is that recovering files is trivial.  How many times have you actually recovered files from your backup program.  Git it a try some time before you think your program is great or easy to use!  To recover rsnapshot files, you don't use rsnapshot. You simply browse over to the location you're saving files, and then each backup appears as a full-site tree structure.  You cut-n-paste, or command line copy or whatever you want to take a copy of the files where you want them.

Krusader

  krusader-iconKrusader is the closest thing to the GUI envrionmental and feature feel of Total Commander. I've used v 1.90.0 under KDE 3.5.9.  I would expect it will equally well run under Gnome or any other desktop environment if the required run-time libraries are installed.  (For the new user, basically install KDE even though you're not going to use it.)  


Testing the programs with a sample Task

I modified a file, renamed a file, and deleted a file in my Documents directory.  My Documents directory is not trivial.  Here are the technical details:

Sync Task


Krusader doing the Sample Task

When I click on the Krusader desktop icon, I specify the left and right directories just like in Total Commander.  Then I menu select t)ools, s)ynchronize, and press the "compare" button on the synchronize screen.  After 771 directories, and 1 min 20 seconds, the following window pops up on my screen.  It appears some buffer or timing program occurs with large directory structures.

Krusader buffer full

I click on okay, and after another 40 seconds, I get a screen and a half of various files to synchronize, including some hidden files (unix . files) and temporary files (unix ~ files) which I have not synchronized.

Krusader Results

Possible Krusader Bug - Besides what is shown above, I noticed also that for filenames with a percent sign (%), Krusader reads the filename properly over an smb link to a Mac OS operating system.  Reading the same filename locally on my Linux system, it interprets the filename to contain a double percent sign (%%).  I suspect this is some programming error in Linux, Mandriva, KDE, or Krusader that handles quoted special characters incorrectly.  In any case, Krusader sees them as different files and tries to copy them back and forth, now generating two files.  Each time it synchronizes, the % turns into another file with %%, then another file with %%%, then %%%% etc.  Kind of awkward...

Also, the file "optics-for-sale.txt" which was deleted, is about to be replaced from the off-site backup.  Like Total Commander, Krusader knows how to propagate files, but does not know how to propagate deletions.  This is why I say it propagates my files, but it does not propagate my work.  For example, if I spend an hour sorting files into sub-directories and shuffling things for better organization, TC and Krusader cannot handle that.  They require an equal amount of time manually stepping through all the potential file copies they find to prevent generating two copies of files - one in the old location and one in the new location. My work is threatened when they replace all the files back and forth.


Unison doing the Sample Task

Clicking on my desktop icon for Unison brings up a GUI where I can choose which profile file to execute.  When I press the run button, a window pops up to ask my ssh password.  After 8 seconds, the screen below appears.  There's nothing fancy here, although I want to point out the formalism of Unison.  Note that for the first file, I renamed it.  Unison perceives this as a new file and a deletion.  Under Krusader, this would show up as two separate files and both would be propagated to the other system; you would have to notice this and manually go back and figure out which one to keep.  Of course, Unison propagates changed files.  Lastly, note that it propagates absences (deletions) of files as easily as the presence of a file. It understands relative "time stamp" on the deletion, not just on a file.  This is good so long as you don't accidentally delete a directory and then do a synchronization!

Unison Works

Although the Unison screen above looks clean, and it happens fast, and it synchronizes correctly, getting this set up was not without effort.  Below is the profile file that defines to Unison how to do my document synchronization:

# Documents.prf, 1/4/2010 by Brian Mork
# Unison preference file

root = /home/brian/Documents
root = ssh://192.168.1.103//Users/brian/Documents

include common-options.profile
#path = Documents
#ignore = Path */My Music*

The above configuration profile file references a common-options file that each of my Unison profiles references.  It is even larger than the profile file above.  Notice, for example, the designation to exclude backup files (unix files ending with a ~) with the command to exclude *~.  What this doesn't show is that hidden files (unix files starting with a .) are automatically excluded from Unison synchronizations.  Krusader found them all, while Unison peacefully does not copy them.  Hmm.. I'm still wonder why, or if I'm doing something wrong.

# Unison common-options, December 2009, by Brian Mork
# from http://www.linuxjournal.com/article/7712
# merge = diff3 -m CURRENT1 OLD CURRENT2 > NEW
# backup = Name *
# maxbackups = 10
# log = true
# logfile = /home/brian/.unison/unison.log

# removed following two lines, and moved to separate profiles; the path names in the
# separate profiles are disabled. This allows the
# roots to be seen on the Unison selection GUI.  Only problem is now each individual
# profile needs to be updated if IP changes.  A second issue is that now invidual
# checksum synchronization files are generated (the files with all the hex digits
# as a name) because a separate synch file is used for each root pair.
# root = /home/brian
# root = ssh://192.168.1.103//Users/brian

# When more "ingore things" are specified interactively with the GUI, we
# want them to be put here rather than the default.prf file.
addprefsto = common-options.profile

# Using ssh link, use compression
rshargs = -C

# On unix systems, check file mod or touch time.  If identical, do not do checksum compare.
fastcheck = true

# Propagate file mod or touch times
times = true

ignore = Name {*~, Thumbs.db, *.tmp}
ignore = Name {.DS_Store}
ignore = Name {unison.log}
ignore = Name {id_rsa*, id_dsa*}


All the best!


This page is maintained by Brian Mork, owner & operator of IncreaTM // It was last modified February 2010. Suggestions for changes and comments are always welcome. The easiest way is to contact me through the Internet.

Valid HTML 4.01 Transitional