basename and dirname in Rust
I recently did some minor file name munging in Rust, and was reminded that one of the hard parts about learning a new language is the differences in vocabulary.
In UNIX, there are two command line tools, basename
and dirname
. They take a pathname as an argument and print a modified pathname to stdout, which is really handy for shell scripts. Several other languages copied that naming convention, and so I was really surprised to find that googling for rust dirname
didn’t return anything useful1.
Here’s a usage example: Say you have a pathname /etc/ssh/sshd.config
, if you use dirname
on it, that prints /etc/ssh
and basename
prints sshd.config
. Ruby, python, go all follow a similar pattern (ok, go calls its functions Dir
and Base
). Rust does not - it calls them something else2.
In Rust, the functions live under the Path
struct and are called parent
(the dirname
equivalent), and file_name
(the basename
equivalent).
These names make sense! They’re just way outside the range of vocabulary I’m used to.
Maybe now that this post is published, it will! ↩︎
Rust used to have functions under these names, up until late 2014-early 2015, but then the “Path reform” happened, which normalized the API a great deal and renamed a bunch of functions. ↩︎