Feature #2190

FileUtils::chmod - allow symbolic mode

Added by sunaku (Suraj Kurapati) about 11 years ago. Updated over 9 years ago.

Target version:



I request that FileUtils::chmod() and FileUtils::chmod_R() accept
symbolic modes, which are strings like "u+x,g-w,o=" (see "symbolic
mode" in man chmod for details), in addition to the numeric modes
they currently accept.

If my request is fulfilled, the following would be equivalent:

FileUtils::chmod(0712, "file.txt")

FileUtils::chmod("u=rwx,g=x,o=w", "file.txt")

In addition, symbolic modes would allow delta/patch changes:

FileUtils::chmod("g+w", "file.txt")

This is not so easy with numeric modes, because you must
first read the current mode, apply your delta/patch mode
using a bitwise OR operation, and finally apply the new
numeric mode using FileUtils::chmod().

Thanks for your consideration.



Updated by znz (Kazuhiro NISHIYAMA) over 10 years ago

  • Category set to lib
  • Target version set to 2.0.0




Updated by takkanm (三村 益隆) over 10 years ago

Hi. I'm takkanm.

FileUtils:: chmod () that I wrote a patch to use the symbolic mode.
How about this?


Updated by sunaku (Suraj Kurapati) over 10 years ago

Thanks for your patch, takkanm! I hope the Ruby developers will
accept it into Ruby trunk. I have one small suggestion for you:

def fu_mode(mode, path)
  • mode.class == String ? symbolic_modes_to_i(mode, path) : mode
  • mode.is_a?(String) ? symbolic_modes_to_i(mode, path) : mode end



Updated by dolzenko (Evgeniy Dolzhenko) almost 10 years ago

+1 Would like to see this it's way to the core, except that current_file_mode function doesn't seem to be really used anyway and can be removed:

  • def symbolic_modes_to_i(modes, path)
  • current_mode = current_file_mode(path)
  • current_mode = (File.stat(path).mode & 07777) ... =end

Updated by anthezium (ted cooper) over 9 years ago

we have a million chmod ... expressions lurking because of this omission. please accept this into trunk!

Updated by kosaki (Motohiro KOSAKI) over 9 years ago

  • Status changed from Open to Assigned
  • Assignee set to kosaki (Motohiro KOSAKI)


This request seems very reasonable to me. I'll review the patch later.

Updated by kosaki (Motohiro KOSAKI) over 9 years ago

  • Status changed from Assigned to Closed


Updated by kosaki (Motohiro KOSAKI) over 9 years ago

I slightly change the testcase at r31415. because FreeBSD don't change sticky bit.


Also available in: Atom PDF