ディレクトリ/ファイル/シンボリックリンクなどを検出する単一の方法はありますか?エンティティ(より一般化された)は存在しますか?
ディレクトリ、ファイル、またはシンボリックリンクである可能性のあるパスの配列をチェックする必要があるため、単一の関数が必要です。私File.exists?"file_path"
はディレクトリとファイルで機能することを知っていますが、シンボリックリンク(であるFile.symlink?"symlink_path"
)では機能しません。
ディレクトリ/ファイル/シンボリックリンクなどを検出する単一の方法はありますか?エンティティ(より一般化された)は存在しますか?
ディレクトリ、ファイル、またはシンボリックリンクである可能性のあるパスの配列をチェックする必要があるため、単一の関数が必要です。私File.exists?"file_path"
はディレクトリとファイルで機能することを知っていますが、シンボリックリンク(であるFile.symlink?"symlink_path"
)では機能しません。
true
場合、最終的に非シンボリックリンクに解決できるかどうかに関係なく、シンボリックリンクが存在する場合に返されるものを求めています。つまりtrue
、壊れたリンクについても返されるはずです。壊れていないシンボリックリンクに対してFile.exists?
のみ返さtrue
れます。
回答:
標準のファイルモジュールには、通常のファイルテストがあります。
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
ENV['HOME'] + '/.bashrc'
クロスプラットフォームでは機能しない可能性のある生の文字列連結()を実行しないことをお勧めします。Rubyファイル結合を使用する必要があります。また、Rails.root
Railsを使用している場合は、そこから始めてみませんか。File.exists?(Rails.root.join('db', 'my_seeds.csv')
/
ただし、WindowsではRubyのIOがスラッシュからバックスラッシュに自動的に変換されるため、の使用は問題ではありません。
bash
スタートメニューに入力すると、表示されるコンソールウィンドウにcat ~/.bashrc
出力が表示されます。¯\ _(ツ)_ /¯
独自の関数File.exists?(path) or File.symlink?(path)
を定義して使用してみませんか?