2010-09-10 91 views
87

我想将文件存储为/a/b/c/d.txt,但我不知道是否存在这些目录中的任何一个,并且需要时递归创建它们。 在红宝石中如何做到这一点?如何在ruby中递归创建目录?

回答

164

使用mkdir_p

FileUtils.mkdir_p '/a/b/c' 

_p是UNIX缓缴父/路径,您还可以使用别名mkpath如果这对你更有意义。

FileUtils.mkpath '/a/b/c' 

在Ruby 1.9文件实用程序从核心删除,所以你必须要require 'fileutils'

+9

+1。 'FileUtils'和'Pathname'可能是最重要的Ruby shell脚本工具。 – 2010-09-10 17:41:27

3
require 'ftools' 

File.makedirs

+1

感谢您的指针!该文件似乎更喜欢FileUtils.mkdir_p,所以我拿... – Jan 2010-09-10 15:49:40

7

如果你在unixy机器上运行,不要忘记你总是可以在ruby下运行一个shell命令,方法是将它置于反引号中。

`mkdir -p /a/b/c` 
+1

给一个函数的命令行,你可以使用内置函数做的不好 – 2017-11-20 15:28:30

+0

尽管如此积极。 – 2017-11-21 00:18:18

16

用户mkdir_p创建目录递归

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

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

你也可以用你自己的逻辑

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 

所以,如果路径是 'TMP/A/B/C' 如果' tmp'不存在'tmp'被创建,然后'tmp/a /'等等等等。