Ruby FileUtils mkdir_p模式 - 意外结果

时间:2015-03-24 17:24:27

标签: ruby

我正在尝试使用:mode中的FileUtils.mkdir_p选项。但是,我使用Ruby 2.1.0获得了意想不到的结果。

require 'fileutils'
FileUtils.mkdir_p '/this/is/my/full/path/tmp', :mode => 2750

结果:

d-wSrwxrwT  2 myuid users   4096 Mar 24 10:14 tmp

但是,如果我只用反引号调用shell命令,我会得到所需的结果:

`mkdir /this/is/my/full/path/tmp && chmod 2750 /this/is/my/full/path/tmp`

结果:

drwxr-s---  2 myuid users   4096 Mar 24 10:16 tmp

如何在不使用shell命令的情况下创建具有所需权限的目录?

2 个答案:

答案 0 :(得分:5)

Ruby将权限解释为整数而不是八进制数。 chmod命令(以及传递给mkdir_p的选项)采用八进制(或等价的整数)。如果你在数字前加0,Ruby会将它用作八进制。

FileUtils.mkdir_p '/this/is/my/full/path/tmp', :mode => 02750

或者,您可以使用整数(ruby -e 'puts 02750.to_i'显示1512)。

FileUtils.mkdir_p '/this/is/my/full/path/tmp', :mode => 1512

答案 1 :(得分:1)

这应该工作,看起来像方法是以权限为基数10整数,而不是八进制(前面有0)

    require 'fileutils'
    FileUtils.mkdir_p '/this/is/my/full/path/tmp', :mode => 02750

检查人类可读格式的权限这个命令对我来说很有用 stat -c"%a%n" *