¿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"
).
true
si el enlace simbólico existe, independientemente de si finalmente se puede resolver como un enlace no simbólico. Es decir, también debería regresartrue
por enlaces rotos.File.exists?
solo regresarátrue
para 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) # => false
Deberí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') # => false
fuente
ENV['HOME'] + '/.bashrc'
) que puede no funcionar en varias plataformas. Debería usar Ruby File joins y también por qué no comenzar desdeRails.root
si 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 .bash
en el menú Inicio, y en la ventana de la consola resultante,cat ~/.bashrc
produce una salida. ¯ \ _ (ツ) _ / ¯¿Por qué no definir su propia función
File.exists?(path) or File.symlink?(path)
y utilizarla?fuente