I wrote a method for FileUtils to do recursive hard linking. It works just like cp_r but links instead of copies.
The code can be found along with the pull request I made to ruby/ruby on Github:
It's a pretty handy method for "staging" read-only files. For example I've used it to stage test fixture files in a tmp testing location and I've used it collect together a set of files for packaging into a tarball.