在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,它更简洁,更不容易出错。
有谁知道是否有办法以更优雅的方式做到这一点?
答案 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