在Ruby中复制chmod的符号模式而不显式调用系统命令

时间:2011-12-05 22:11:12

标签: ruby chmod

在Unix / Linux系统上,chmod函数支持“符号模式”,这意味着您可以执行基本上具有权限的位算术,例如chmod u+x ...是用于为用户添加可执行权限的符号形式。 Ruby chmod中的FileUtils函数仅支持绝对位掩码作为权限,即您只能执行FileUtils.chmod(0777, ...),但FileUtils.chmod('u+x', ...)将无效。

我知道这样做的一种方法就是直接调用system命令:system("chmod u+x ..."),但是我更愿意尽可能地将代码保存在Ruby域中,而不是在任何地方生成shell 。或者,我可以遍历File个对象,File.stat它们,获取它们现有的位掩码并单独修改它们,但符号模式将支持文件glob,它更简洁,更不容易出错。

有谁知道是否有办法以更优雅的方式做到这一点?

1 个答案:

答案 0 :(得分:2)

您使用的是哪个版本的Ruby?看看1.9.3 docs for FileUtils.chmod

  

将命名文件(列表中)的权限位更改为该位       模式表示的模式。 mode是符号和绝对模式       可以使用。绝对模式是

FileUtils.chmod 0755, 'somecommand'
FileUtils.chmod 0644, %w(my.rb your.rb his.rb her.rb)
FileUtils.chmod 0755, '/usr/bin/ruby', :verbose => true
     

符号模式是

FileUtils.chmod "u=wrx,go=rx", 'somecommand'
FileUtils.chmod "u=wr,go=rr", %w(my.rb your.rb his.rb her.rb)
FileUtils.chmod "u=wrx,go=rx", '/usr/bin/ruby', :verbose => true