Ruby FileUtils mkdir_p模式-意外结果

Ruby FileUtils mkdir_p模式-意外结果,ruby,Ruby,我正在尝试使用FileUtils.mkdir\u p中的:mode选项。然而,我使用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 drwxr-s--- 2 myuid users 4096 Mar 24 10:16 t

我正在尝试使用
FileUtils.mkdir\u p
中的
:mode
选项。然而,我使用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
drwxr-s---  2 myuid users   4096 Mar 24 10:16 tmp
但是,如果我只是用反勾号调用shell命令,我会得到所需的结果:

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

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

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

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

FileUtils.mkdir\u 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

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

要以人类可读的格式检查权限,此命令对我很有效
stat-c“%a%n”*

@GregRuhl八进制是在shell中假定的,因为
chmod
是手动解释字符串的,八进制不是在Ruby中假定的,因为在
mkdir\u p
看到
:mode
选项的值之前,四个字符
2750
被转换为Fixnum。