Как проверить, существует ли каталог / файл / символическая ссылка с одной командой в Ruby - PullRequest
68 голосов
/ 04 февраля 2011

Есть ли единственный способ определить, находится ли каталог / file / symlink / etc.сущность (более обобщенная) существует?

Мне нужна одна функция, потому что мне нужно проверить массив путей, которые могут быть каталогами, файлами или символическими ссылками.Я знаю, File.exists?"file_path" работает для каталогов и файлов, но не для символических ссылок (то есть File.symlink?"symlink_path").

Ответы [ 2 ]

126 голосов
/ 04 февраля 2011

Стандартный файловый модуль имеет обычные тесты файлов доступно:

RUBY_VERSION # => "1.9.2"
bashrc = ENV['HOME'] + '/.bashrc'
File.exist?(bashrc) # => true
File.file?(bashrc)  # => true
File.directory?(bashrc) # => false

Вы должны быть в состоянии найти то, что вы хотите там.


ОП: "Спасибо, но мне нужны все три, истинные или ложные"

Очевидно, нет. Хорошо, попробуйте что-то вроде:

def file_dir_or_symlink_exists?(path_to_file)
  File.exist?(path_to_file) || File.symlink?(path_to_file)
end

file_dir_or_symlink_exists?(bashrc)                            # => true
file_dir_or_symlink_exists?('/Users')                          # => true
file_dir_or_symlink_exists?('/usr/bin/ruby')                   # => true
file_dir_or_symlink_exists?('some/bogus/path/to/a/black/hole') # => false
13 голосов
/ 04 февраля 2011

Почему бы не определить свою собственную функцию File.exists?(path) or File.symlink?(path) и использовать ее?

...