A Small Update to `zsh-dwim`: rsync and dstat

| Comments

I recently added transformations for two more commands, dstat and rsync, to zsh-dwim. These new transformations aren’t exactly in line with zsh-dwim’s original goal.

Almost all of zsh-dwim’s transformations up to this point have been about laziness. If you untar something, zsh-dwim will let you cd right into the directory it was extracted to without having to guess at the directory name. If you fail to ssh into a host, it will construct the command to remove that host from your known_hosts file for you.

These new transformations aren’t just about laziness. They are also about memory. They’re helping me spend less time referring to man pages and more time running commands.

The new, simple rsync transformations

I use rsync quite a bit. Most of the time I only care about moving some data around and I don’t care one bit about permissions, hard links, or crossing file system boundaries. Once every few months, though, I do care about these things, and when I do, they are VERY important.

I always know off the top of my head to run rsync -a for “archive,” but when you’re trying to effectively clone a drive, this isn’t really enough. You might very well need to copy ACLS and extended attributes. You will almost certainly want to handle sparse files correctly.

I don’t know about you, but on the rare occasions when I need these options, I end up checking and rechecking the rsync man page to make sure I didn’t miss anything. Having the whole set of options (-aHAXS in my case) pop up at the press of a button is handy. It’ll be even handier in a few months when I forget all this and need to do it again.

The new, simple dstat/vmstat transformations

I started using dstat some-time last year instead of vmstat. It has much nicer, colorized output and it can monitor quite a bit more things than vmstat. In fact, I have vmstat aliased to dstat (specifically dstat -cpgdms -D total).

The two things I tend to want to monitor with dstat are the usual vmstat numbers and disk I/O. I would often build up a dstat command to monitor a specific block device, but lately I have found that dstat -f is all I really need, so at this point zsh-dwim toggles between vmstat and dstat -f.

Why not just use aliases?

I had already given this a lot of though, even before reading comments about using aliases instead of zsh-dwim on Reddit. Aliases are wonderful and I use them all the time. I have two problems with them, though.

First of all, I have to remember that I have the alias that I need. For commands that I use daily or weekly this should be pretty easy. I don’t make “perfect” clones with rsync often enough to remember that I have an alias for that.

The other problem with aliases, and this is my biggest concern lately, is that they hide the command that you’re actually running. Most of the time, this opacity is welcomed. I really don’t care that when I run vmstat it is actually running a more complex dstat command, but I most definitely want to see which switches are being passed to rsync. It makes it easier to modify them or add more switches.

There are ways around some of this opacity but I’m only willing to do it with my global aliases. Automatically expanding much else would just be too noisy.

Future plans for zsh-dwim

I’m keeping my eye open for more commands that I tend to run in series so that I can turn them into transformations. I’m running pretty low on ideas, though. I’ve optimized my own workflow pretty nicely already. I’m more a sysadmin type, though. I’d really be interested in hearing from some programmer types. There have to be some git-related workflow ideas that I could add to zsh-dwim, but I’m just too light of a git user to know what they are.

If you have any ideas please, don’t hesitate to leave a comment or send me an email! Thoughts and opinions are probably worth more to the zsh-dwim project than code contributions at this point.