如何检查Ruby中是否存在给定目录

如何检查Ruby中是否存在给定目录,ruby,directory,Ruby,Directory,我正在尝试编写一个脚本,根据指定目录是否存在自动签出或更新Subversion URL 出于某种原因,我的代码不起作用,即使它为false,也总是返回true: def directory_exists?(directory) return false if Dir[directory] == nil true end 我做错了什么 File.exist?("directory") Dir[]返回一个数组,因此它永远不会是nil。如果你想按自己的方式做,你可以 Dir["direct

我正在尝试编写一个脚本,根据指定目录是否存在自动签出或更新Subversion URL

出于某种原因,我的代码不起作用,即使它为false,也总是返回true:

def directory_exists?(directory)
  return false if Dir[directory] == nil
  true
end
我做错了什么

File.exist?("directory")
Dir[]
返回一个数组,因此它永远不会是
nil
。如果你想按自己的方式做,你可以

Dir["directory"].empty?

如果找不到它,它将返回
true

如果您要查找的文件是否是目录而不仅仅是文件很重要,您可以使用
。仅当文件存在且为目录时,才会返回true

另一方面,编写该方法的一种更为惯用的方法是利用Ruby自动返回方法中最后一个表达式的结果这一事实。因此,你可以这样写:

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

请注意,在本例中不需要使用方法

所有其他答案都是正确的,但是,如果您试图检查用户主目录中的目录,则可能会出现问题。确保在检查之前展开相对路径:

File.exists? '~/exists'
=> false
File.directory? '~/exists'
=> false
File.exists? File.expand_path('~/exists')
=> true
您也可以这样使用:

如果“目录名”是目录,则返回
true
,否则返回
false

您可以使用:

它起源于 您将注意到bash
test
具有此标志
-d
,用于测试目录是否存在
-d file如果文件是目录,则为True。[[-d demofile]]

为什么还要把它放在另一个方法中呢?直接打电话就行了@我认为,为了解决这个问题,简化的方法可能会被简化,而实际的方法可能会包含一些额外的逻辑。如果这个方法不需要其他逻辑,我同意。无论如何,只要运行目录?直接。难道
Dir.exists?
不比
File.directory?
Dir.exists?
不推荐使用,使用
Dir.exist
@burningpony my bad,它是
Dir.exist?
这很整洁。不是最直接的表达方式,而是整洁的。
Dir.exist?('Directory Name')
test ?d, 'some directory'