1. ホーム
  2. ruby

[解決済み] Rubyで1つのコマンドでディレクトリ/ファイル/シンボリックリンクが存在するかどうかをチェックする方法

2023-05-17 01:14:17

質問

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

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

どのように解決するのですか?

標準のFileモジュールでは、通常の ファイルテスト が利用できます。

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

そこにあなたの欲しいものがあるはずです。


OP: "ありがとう、でも3つともtrueかfalseが必要なんだ。

明らかに違いますね。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