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


есть один способ обнаружения, если каталог/файл/ссылка/и т. д. сущность (более обобщенная) существует?

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

2 54

2 ответа:

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

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

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


OP: "Спасибо, но мне нужны все три true или 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

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