Как проверить, существует ли данный каталог в Ruby

Я пытаюсь написать script, который автоматически проверяет или обновляет URL-адрес Subversion на основе того, существует или нет указанный каталог.

По какой-то причине мой код не работает и всегда возвращает true, даже если он неверен:

def directory_exists?(directory)
  return false if Dir[directory] == nil
  true
end

Что я делаю неправильно?

Ответ 1

Если важно, будет ли файл, который вы ищете, directory, а не только файл, вы можете использовать File.directory? или Dir.exist?. Это вернет true, только если файл существует и является каталогом.

В стороне, более идиоматичным способом написания метода было бы воспользоваться тем фактом, что Ruby автоматически возвращает результат последнего выражения внутри метода. Таким образом, вы можете написать это следующим образом:

def directory_exists?(directory)
  File.directory?(directory)
end

Обратите внимание, что использование метода в данном случае не требуется.

Ответ 2

Все остальные ответы правильные, однако у вас могут быть проблемы, если вы пытаетесь проверить каталог в домашнем каталоге пользователя. Перед проверкой убедитесь, что вы выделили относительный путь:

File.exists? '~/exists'
=> false
File.directory? '~/exists'
=> false
File.exists? File.expand_path('~/exists')
=> true

Ответ 3

Вы также можете использовать Dir::exist? так:

Dir.exist?('Directory Name')

Возвращает true, если "Имя каталога" является каталогом, false иначе. 1

Ответ 4

File.exist?("directory")

Dir[] возвращает массив, поэтому он никогда не будет nil. Если вы хотите сделать это по-своему, вы можете сделать

Dir["directory"].empty?

который вернет true, если он не найден.

Ответ 5

Вы можете использовать Kernel#test:

test ?d, 'some directory'