如何在ruby中递归创建目录?

时间:2010-09-10 15:39:34

标签: ruby

我想将文件存储为/a/b/c/d.txt,但我不知道是否存在任何这些目录,并且如果需要,需要以递归方式创建它们。 怎么能用红宝石做到这一点?

6 个答案:

答案 0 :(得分:178)

使用mkdir_p

FileUtils.mkdir_p '/a/b/c'

_p是父/路径的unix保留,如果对你更有意义,你也可以使用别名mkpath

FileUtils.mkpath '/a/b/c'

在Ruby 1.9中,FileUtils已从核心中删除,因此您必须require 'fileutils'

答案 1 :(得分:18)

用户mkdir_p以递归方式创建目录

path = "/tmp/a/b/c"

FileUtils.mkdir_p(path) unless File.exists?(path)

答案 2 :(得分:6)

如果你在unixy机器上运行,不要忘记你总是可以通过将它放在反引号中来在ruby下运行shell命令。

`mkdir -p /a/b/c`

答案 3 :(得分:3)

 require 'ftools'

File.makedirs

答案 4 :(得分:0)

Pathname来营救!

Pathname('/a/b/c/d.txt').dirname.mkpath

答案 5 :(得分:-1)

您也可以使用自己的逻辑

def self.create_dir_if_not_exists(path)
  recursive = path.split('/')
  directory = ''
  recursive.each do |sub_directory|
    directory += sub_directory + '/'
    Dir.mkdir(directory) unless (File.directory? directory)
  end
end

因此,如果路径是&t; tmp / a / b / c' 如果' tmp'不存在' tmp'得到了创造,然后&t; tmp / a /'等等。