How to check if a given directory exists in Ruby

后端 未结 5 1569
难免孤独
难免孤独 2020-12-22 20:17

I am trying to write a script which automatically checks out or updates a Subversion URL based on whether a specified directory exists or not.

For some reason, my co

相关标签:
5条回答
  • 2020-12-22 20:56

    You could use Kernel#test:

    test ?d, 'some directory'
    

    it gets it's origins from https://ss64.com/bash/test.html you will notice bash test has this flag -d to test if a directory exists -d file True if file is a Directory. [[ -d demofile ]]

    0 讨论(0)
  • 2020-12-22 20:57

    If it matters whether the file you're looking for is a directory and not just a file, you could use File.directory? or Dir.exist?. This will return true only if the file exists and is a directory.

    As an aside, a more idiomatic way to write the method would be to take advantage of the fact that Ruby automatically returns the result of the last expression inside the method. Thus, you could write it like this:

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

    Note that using a method is not necessary in the present case.

    0 讨论(0)
  • File.exist?("directory")
    

    Dir[] returns an array, so it will never be nil. If you want to do it your way, you could do

    Dir["directory"].empty?
    

    which will return true if it wasn't found.

    0 讨论(0)
  • You can also use Dir::exist? like so:

    Dir.exist?('Directory Name')
    

    Returns true if the 'Directory Name' is a directory, false otherwise.1

    0 讨论(0)
  • 2020-12-22 21:12

    All the other answers are correct, however, you might have problems if you're trying to check directory in a user's home directory. Make sure you expand the relative path before checking:

    File.exists? '~/exists'
    => false
    File.directory? '~/exists'
    => false
    File.exists? File.expand_path('~/exists')
    => true
    
    0 讨论(0)
提交回复
热议问题