我正在尝试编写一个脚本,根据指定的目录是否存在自动检出或更新Subversion URL.
出于某种原因,我的代码不起作用,即使它是假的,总是返回true:
def directory_exists?(directory)
return false if Dir[directory] == nil
true
end
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Emi*_*ily 277
如果您要查找的文件是目录而不仅仅是文件,那么您可以使用File.directory?或Dir.exist?.仅当文件存在且目录为时,才会返回true.
顺便说一下,编写该方法的更惯用的方法是利用Ruby自动返回方法中最后一个表达式的结果这一事实.因此,您可以像这样写:
def directory_exists?(directory)
File.directory?(directory)
end
Run Code Online (Sandbox Code Playgroud)
注意,在当前情况下不需要使用方法.
ma1*_*w28 40
您也可以Dir::exist?这样使用:
Dir.exist?('Directory Name')
Run Code Online (Sandbox Code Playgroud)
true如果"目录名称"是目录,false则返回,否则返回.1
And*_*rew 37
所有其他答案都是正确的,但是,如果您尝试检查用户主目录中的目录,则可能会出现问题.确保在检查前扩展相对路径:
File.exists? '~/exists'
=> false
File.directory? '~/exists'
=> false
File.exists? File.expand_path('~/exists')
=> true
Run Code Online (Sandbox Code Playgroud)
clo*_*ead 17
File.exist?("directory")
Run Code Online (Sandbox Code Playgroud)
Dir[]返回一个数组,所以永远不会nil.如果你想按自己的方式去做,你可以做到
Dir["directory"].empty?
Run Code Online (Sandbox Code Playgroud)
true如果没有找到它将返回.
你可以使用Kernel#test:
test ?d, 'some directory'
Run Code Online (Sandbox Code Playgroud)
它来自https://ss64.com/bash/test.html
你会发现bash test有这个标志-d来测试一个目录是否存在
-d file True if file is a Directory. [[ -d demofile ]]