在 Ruby 中复制 chmod 的符号模式,而无需显式调用系统命令
在 Unix/Linux 系统上,chmod
函数支持“符号模式”,这意味着您可以使用权限执行本质上的位算术操作,例如 chmod u+x ...
是为用户添加可执行权限的符号形式。 Ruby 的 FileUtils
中的 chmod
函数仅支持绝对位掩码作为权限,即您只能执行 FileUtils.chmod(0777, ...)
但 FileUtils.chmod('u+x', ...)
将不起作用。
我知道一种方法是直接调用 system
命令:system("chmod u+x ...")
,但我更愿意尽可能将代码保留在 Ruby 域中,而不是到处生成 shell。或者,我可以迭代 File
对象,File.stat
它们,获取它们现有的位掩码并单独修改它们,但符号模式将支持文件 glob,这要多得多简洁且不易出错。
有谁知道是否有一种方法可以以更优雅的方式做到这一点?
On Unix/Linux systems, the chmod
function supports "symbolic modes", meaning you can do what is essentially bit-arithmetic with permissions, e.g. chmod u+x ...
is a symbolic form for adding executable permissions for the user. The chmod
function in Ruby's FileUtils
only supports an absolute bitmask as a permission, i.e. you can only do FileUtils.chmod(0777, ...)
but FileUtils.chmod('u+x', ...)
will not work.
I get that one way to do this is to just call the system
command directly: system("chmod u+x ...")
, but I'd prefer to keep code in the Ruby domain as much as possible without spawning shells everywhere. Alternatively, I could iterate through File
objects, File.stat
them, get their existing bitmasks and modify them individually, but symbolic modes will support a file glob, which is much more succinct and less error prone.
Does anyone know whether there is a way to do this in a more elegant way?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您使用什么版本的 Ruby?查看 1.9。 FileUtils.chmod 的 3 个文档:
What version of Ruby are you using? Look at the 1.9.3 docs for FileUtils.chmod: