Как создать каталоги рекурсивно в ruby? - PullRequest
94 голосов
/ 10 сентября 2010

Я хочу сохранить файл как /a/b/c/d.txt, но я не знаю, существует ли какой-либо из этих каталогов, и мне нужно рекурсивно создавать их при необходимости. Как это можно сделать в ruby?

Ответы [ 6 ]

181 голосов
/ 10 сентября 2010

Использование mkdir_p:

FileUtils.mkdir_p '/a/b/c'

_p - это удержание Unix для родителя / пути, вы также можете использовать псевдоним mkpathесли это имеет больше смысла для вас.

FileUtils.mkpath '/a/b/c'

В Ruby 1.9 FileUtils был удален из ядра, поэтому вам придется require 'fileutils'.

18 голосов
/ 18 октября 2012

Пользователь mkdir_p для рекурсивного создания каталога

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

FileUtils.mkdir_p(path) unless File.exists?(path)
6 голосов
/ 10 сентября 2010

Если вы работаете на unixy машинах, не забывайте, что вы всегда можете запустить команду оболочки под ruby, поместив ее в обратные черты.

3 голосов
/ 10 сентября 2010
 require 'ftools'

File.makedirs

0 голосов
/ 22 ноября 2018

Путь на помощь!

Pathname('/a/b/c/d.txt').dirname.mkpath
0 голосов
/ 31 января 2016

Вы также можете использовать свою собственную логику

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 / и т. д. и т. п.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...