Rubyに特定のディレクトリが存在するかどうかを確認する方法


163

指定したディレクトリが存在するかどうかに基づいて、Subversion URLを自動的にチェックアウトまたは更新するスクリプトを記述しようとしています。

何らかの理由で、私のコードは機能せず、falseの場合でも常にtrueを返します

def directory_exists?(directory)
  return false if Dir[directory] == nil
  true
end

何が悪いのですか?

回答:


287

探しているファイルがディレクトリかどうかが重要な場合単なるファイルではなくFile.directory?またはを使用できますDir.exist?。これは、ファイルが存在し、ディレクトリである場合にのみtrueを返します。

余談ですが、メソッドを作成するより慣用的な方法は、Rubyがメソッド内の最後の式の結果を自動的に返すという事実を利用することです。したがって、次のように書くことができます。

def directory_exists?(directory)
  File.directory?(directory)
end

この場合、メソッドを使用する必要はありません。


139
なぜそれを別のメソッドの中に置くのも面倒なのですか?直接呼び出すだけです!
ライアンビッグ

11
@Radar私は、簡略化されたメソッドは質問の目的のために単純化されている可能性が高く、実際のメソッドにはいくつかの追加ロジックが含まれている可能性があると考えました。メソッドに他のロジックを追加する必要がない場合は、同意します。どうしても、ディレクトリを実行するだけですか?直接。
エミリー

4
Dir.exists?よりもきれいになりませんFile.directory?か?
Yo Ludke 2014年

3
Dir.exists?廃止予定です。使用してくださいDir.exist
fkoessler '21 / 04/15

4
@burningpony my bad、it'sDir.exist?
fkoessler

42

次のDir::exist?ように使用することもできます:

Dir.exist?('Directory Name')

true「ディレクトリ名」がディレクトリであるかどうかを返しますfalse1


2
これにはRuby> 1.9程度が必要と思われますが、1.8では戻りますundefined method `exists?' for Dir:Class (NoMethodError)。また、複数形は非推奨になり.exist?ました。代わりに使用してください。
Josip Rodin

40

他のすべての答えは正しいですが、ユーザーのホームディレクトリのディレクトリを確認しようとすると、問題が発生する可能性があります。確認する前に、必ず相対パスを展開してください。

File.exists? '~/exists'
=> false
File.directory? '~/exists'
=> false
File.exists? File.expand_path('~/exists')
=> true

18
File.exist?("directory")

Dir[]配列を返すので、にはなりませんnil。あなたがそれをあなたのやり方でしたいなら、あなたはすることができます

Dir["directory"].empty?

見つからなかったtrue場合は戻ります。


7

あなたは使うことができますKernel#test

test ?d, 'some directory'

https://ss64.com/bash/test.htmlからオリジンを取得し ますbashにディレクトリが存在するかどうかをテストするための testこのフラグがあることに気づくでしょう-d-d file True if file is a Directory. [[ -d demofile ]]


1
これはすごいです。最もすぐに表現力があるわけではありませんが、きちんとしています。
kayleeFrye_onDeck
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.