¿Existe una única forma de detectar si un directorio / archivo / enlace simbólico / etc. entidad (más generalizada) existe?
Necesito una sola función porque necesito verificar una serie de rutas que podrían ser directorios, archivos o enlaces simbólicos. Sé que File.exists?"file_path"funciona para directorios y archivos, pero no para enlaces simbólicos (que es File.symlink?"symlink_path").

truesi el enlace simbólico existe, independientemente de si finalmente se puede resolver como un enlace no simbólico. Es decir, también debería regresartruepor enlaces rotos.File.exists?solo regresarátruepara un enlace simbólico que no esté roto.Respuestas:
El módulo de archivo estándar tiene disponibles las pruebas de archivo habituales :
RUBY_VERSION # => "1.9.2" bashrc = ENV['HOME'] + '/.bashrc' File.exist?(bashrc) # => true File.file?(bashrc) # => true File.directory?(bashrc) # => falseDebería poder encontrar lo que busca allí.
Obviamente no. Ok, prueba algo como:
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') # => falsefuente
ENV['HOME'] + '/.bashrc') que puede no funcionar en varias plataformas. Debería usar Ruby File joins y también por qué no comenzar desdeRails.rootsi está usando Rails.File.exists?(Rails.root.join('db', 'my_seeds.csv')/embargo, el uso de no es el problema, ya que Ruby IO se convierte automáticamente de barras diagonales a barras diagonales inversas en Windows .bashen el menú Inicio, y en la ventana de la consola resultante,cat ~/.bashrcproduce una salida. ¯ \ _ (ツ) _ / ¯¿Por qué no definir su propia función
File.exists?(path) or File.symlink?(path)y utilizarla?fuente