Feature #4189



Added by trans (Thomas Sawyer) over 13 years ago. Updated about 6 years ago.

Target version:


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.


fileutils_ln_r.patch (4.72 KB) fileutils_ln_r.patch zzak (zzak _), 11/19/2012 07:09 AM
fileutils_cp_lr.patch (4.72 KB) fileutils_cp_lr.patch mame (Yusuke Endoh), 03/08/2018 08:29 AM

Updated by naruse (Yui NARUSE) almost 13 years ago

  • Status changed from Open to Assigned
  • Assignee set to matz (Yukihiro Matsumoto)



Updated by matz (Yukihiro Matsumoto) almost 13 years ago

Since ln command does not have -r option, I am kind of hesitating to add ln_r. I understand usefulness of the method. But I am not sure yet where to add (is fileutils the best place?), and what to add (is ln_r the best name for the method?).


Updated by sakuro (Sakuro OZAWA) almost 13 years ago

X11 distribution has lndir command, it creates real directories and file symlinks though.

Updated by johan556 (Johan Holmberg) almost 13 years ago

GNU cp has the -l option, so I think the proposed method is similiar to "cp -lr" on Linux systems.

Updated by reset (Jamie Winsor) almost 12 years ago

This ticket hasn't seen action in a year, but I wanted to chime in and +1 the feature.

Having a convenience function to recursively create hard links based on a source directory is a rare need, but a need, nonetheless. I think FileUtils is a fine place for it when compared to the other choices of where to place it in Ruby core.

Updated by zzak (zzak _) over 11 years ago

Adding Thomas' patch from github.

Updated by mame (Yusuke Endoh) over 11 years ago

  • Target version set to 2.6

Updated by matz (Yukihiro Matsumoto) over 6 years ago

Accepted, but I am against the name ln_r because it behaves differently from ln -r (relative).


Updated by akr (Akira Tanaka) over 6 years ago

After discussion at the developer meeting, cp_lr may be an consensus.

Actions #10

Updated by naruse (Yui NARUSE) over 6 years ago

  • Target version deleted (2.6)

Updated by mame (Yusuke Endoh) about 6 years ago

I'll commit this patch that introduces FileUtils.cp_lr in a few days. Let me know if there is a problem.

Updated by mame (Yusuke Endoh) about 6 years ago

  • Assignee changed from matz (Yukihiro Matsumoto) to mame (Yusuke Endoh)
Actions #13

Updated by mame (Yusuke Endoh) about 6 years ago

  • Status changed from Assigned to Closed

Applied in changeset trunk|r62739.

Add FileUtils#cp_lr

  • lib/fileutils.rb: Add FileUtils#cp_lr. This method creates hard links
    of each file from directory to another directory recursively.
    This patch is based on Thomas Sawyers and Zachary Scott.
    [Feature #4189] [ruby-core:33820]

Also available in: Atom PDF