web-dev-qa-db-fra.com

Comment vérifier si un répertoire / fichier / lien symbolique existe avec une commande dans Ruby

Existe-t-il un moyen unique de détecter si un répertoire/fichier/symlink/etc. entité (plus généralisée) existe?

J'ai besoin d'une seule fonction car j'ai besoin de vérifier un tableau de chemins qui pourraient être des répertoires, des fichiers ou des liens symboliques. Je sais File.exists?"file_path" fonctionne pour les répertoires et les fichiers mais pas pour les liens symboliques (ce qui est File.symlink?"symlink_path").

71
Clawsy

Le module File standard a l'habituel tests de fichiers disponible:

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

Vous devriez pouvoir y trouver ce que vous voulez.


OP: "Merci mais j'ai besoin des trois vrais ou faux"

Évidemment pas. Ok, essayez quelque chose comme:

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
130
the Tin Man

Pourquoi ne pas définir votre propre fonction File.exists?(path) or File.symlink?(path) et l'utiliser?

13