Rsync, GUIs, power, control, design, and decisions
> Successful UNIX tools (or any tools, for the most part) are the ones with a simple concept manifested very thoroughly, and rsync is certainly that. [...] There are over 100 flags in rsync that you can select to do different things. So, this is what I mean by doing something simple, and doing it very well and very thoroughly.Rsync is certainly not simple. It certainly doesn't do one thing. It's "extraordinarily versatile" to the point of madness. Here's what it does:- Copies files from A to B- Mirrors directories- Computes diffs- Applies patches- Evaluates filters- Runs as a daemon- Runs over various remote shells- Applies filters to filenamesAnd then it doesn't give you a good progress bar or let you resume interrupted operations, or gather errors at the end. I think this is a good case where the tool may have grown too large and unwieldy, and it may be better to replace it with an API or a collection of small, UNIX-like tools. For example, if I just want to copy files from point A to B, I can do this:    tar c . | ssh host tar xv

If I want a progress bar, I can use pv,    tar c . | pv | ssh host tar xv

Usually I find this easier to use than rsync.