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

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

由于某种原因,我的代码无法正常工作,即使返回的是 false,它也总是返回 没错:

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

我做错了什么?

142973 次浏览
File.exist?("directory")

Dir[]返回一个数组,所以它永远不会是 nil。如果你想按你的方式来,你可以的

Dir["directory"].empty?

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

如果您要查找的文件是 目录而不仅仅是一个文件,那么可以使用 File.directory?Dir.exist?。只有当文件存在并且是一个目录时,才会返回 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

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

Dir.exist?('Directory Name')

如果‘ Directory Name’是一个目录,返回 true,否则返回 false

你可以使用 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 ]]