web-dev-qa-db-ja.com

Rubyで1つのコマンドでディレクトリ/ファイル/シンボリックリンクが存在するかどうかを確認する方法

ディレクトリ/ファイル/シンボリックリンクなどを検出する単一の方法はありますか?より一般化されたエンティティが存在しますか?

ディレクトリ、ファイル、またはシンボリックリンクである可能性があるパスの配列を確認する必要があるため、単一の関数が必要です。知っている File.exists?"file_path"はディレクトリとファイルには機能しますが、シンボリックリンクには機能しません(File.symlink?"symlink_path")。

71
Clawsy

標準のFileモジュールには、通常の file tests があります:

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

あなたがそこに欲しいものを見つけることができるはずです。


OP:「ありがとう。ただし、3つすべてが真または偽である必要があります」

明らかにそうではありません。 OK、次のようなものを試してください:

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

独自の関数File.exists?(path) or File.symlink?(path)を定義して使用してみませんか?

13