Создать каталог, если он не существует с Ruby

Я пытаюсь создать каталог со следующим кодом:

Dir.mkdir("/Users/Luigi/Desktop/Survey_Final/Archived/Survey/test")
    unless File.exists?("/Users/Luigi/Desktop/Survey_Final/Archived/Survey/test")  

Однако я получаю эту ошибку:

Нет такого файла или каталога -/Пользователи/Luigi/Desktop/Survey_Final/Archived/Survey/test (Errno:: ENOENT)

Почему этот каталог не создается с помощью инструкции Dir.mkdir выше?

Ответ 1

Вероятно, вы пытаетесь создать вложенные каталоги. Предполагая, что foo не существует, вы получите ошибку no such file or directory для:

Dir.mkdir 'foo/bar'
# => Errno::ENOENT: No such file or directory - 'foo/bar'

Для создания вложенных каталогов сразу требуется FileUtils:

require 'fileutils'
FileUtils::mkdir_p 'foo/bar'
# => ["foo/bar"]

Edit2: вам не нужно использовать FileUtils, вы можете выполнить системный вызов (обновление из @mu слишком короткое):

> system 'mkdir', '-p', 'foo/bar' # worse version: system 'mkdir -p "foo/bar"'
=> true

Но это кажется (по крайней мере для меня) худшим подходом, поскольку вы используете внешний "инструмент", который может быть недоступен в некоторых системах (хотя я вряд ли могу представить систему без mkdir, но кто знает).

Ответ 2

Простой способ:

directory_name = "name"
Dir.mkdir(directory_name) unless File.exists?(directory_name)

Ответ 3

Еще один простой способ:

Dir.mkdir('tmp/excel') unless Dir.exist?('tmp/excel')

Ответ 4

Как насчет только Dir.mkdir('dir') rescue nil?