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.<p>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:<p>- Copies files from A to B<p>- Mirrors directories<p>- Computes diffs<p>- Applies patches<p>- Evaluates filters<p>- Runs as a daemon<p>- Runs over various remote shells<p>- Applies filters to filenames<p>And 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:<p><pre><code>    tar c . | ssh host tar xv
</code></pre>
If I want a progress bar, I can use pv,<p><pre><code>    tar c . | pv | ssh host tar xv
</code></pre>
Usually I find this easier to use than rsync.