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

时间:2009-07-06 02:48:45

标签: ruby

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

出于某种原因,我的代码无效,并且总是返回 true ,即使它是假的:

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

我做错了什么?

5 个答案:

答案 0 :(得分:262)

如果您要查找的文件是目录而不仅仅是文件,那么您可以使用File.directory?Dir.exist?。只有当文件存在并且是目录时,才会返回true。

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

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

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

答案 1 :(得分:35)

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

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

答案 2 :(得分:34)

你也可以这样使用Dir::exist?

Dir.exist?('Directory Name')
  

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

答案 3 :(得分:17)

File.exist?("directory")

Dir[]返回一个数组,因此永远不会是nil。如果你想按自己的方式去做,你可以做到

Dir["directory"].empty?

如果未找到,将返回true

答案 4 :(得分: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 ]]