我正在尝试编写一个脚本,根据指定的目录是否存在自动检出或更新Subversion URL。
出于某种原因,我的代码无效,并且总是返回 true ,即使它是假的:
def directory_exists?(directory)
return false if Dir[directory] == nil
true
end
我做错了什么?
答案 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)
答案 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 ]]