주어진 디렉토리가 Ruby에 존재하는지 확인하는 방법


163

지정된 디렉토리의 존재 여부에 따라 Subversion URL을 자동으로 체크 아웃하거나 업데이트하는 스크립트를 작성하려고합니다.

어떤 이유로 든 내 코드가 작동하지 않고 false 인 경우에도 항상 true를 반환 합니다 .

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

내가 뭘 잘못하고 있죠?

답변:


287

당신이 찾고있는 파일이 있는지 여부를 중요한 경우 디렉토리 뿐 아니라 파일, 당신은 사용할 수 있습니다 File.directory?또는 Dir.exist?. 파일이 존재하고 디렉토리 인 경우에만 true를 리턴합니다.

게다가, 메소드를 작성하는보다 관용적 인 방법은 Ruby가 메소드 내에서 마지막 표현식의 결과를 자동으로 리턴한다는 사실을 이용하는 것입니다. 따라서 다음과 같이 작성할 수 있습니다.

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

이 경우 방법을 사용할 필요는 없습니다.


139
왜 다른 방법으로 그것을 귀찮게합니까? 바로 전화하십시오!
Ryan Bigg

11
@Radar 필자는 제거 된 방법이 질문의 목적으로 단순화되었을 가능성이 있으며 실제 방법에는 추가 논리가 포함될 수 있다고 생각했습니다. 방법에 다른 논리가 필요하지 않으면 동의합니다. 꼭, 그냥 디렉토리를 실행? 직접.
Emily

4
하지 않을까요 Dir.exists?보다 깨끗하지 File.directory??
Yo Ludke

3
Dir.exists?더 이상 사용되지 않습니다Dir.exist
fkoessler

4
@burningpony 나의 나쁜, 그것은Dir.exist?
fkoessler

42

다음 Dir::exist?과 같이 사용할 수도 있습니다 .

Dir.exist?('Directory Name')

true'Directory Name'이 디렉토리인지 여부를 반환 합니다 false. 1


2
이것은 Ruby> 1.9 정도가 필요한 것으로 보이며 1.8에서는을 반환합니다 undefined method `exists?' for Dir:Class (NoMethodError). 또한 복수형은 더 이상 사용되지 않으며 .exist?대신 사용하십시오.
Josip Rodin

40

다른 모든 대답은 맞지만 사용자의 홈 디렉토리에서 디렉토리를 확인하려고하면 문제가있을 수 있습니다. 확인하기 전에 상대 경로를 확장했는지 확인하십시오.

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

18
File.exist?("directory")

Dir[]배열을 반환하므로 결코 그렇지 않습니다 nil. 당신이 당신의 방식으로 그것을하고 싶다면, 당신은 할 수 있습니다

Dir["directory"].empty?

이는 반환 true이 경우 되지 않았습니다 발견했다.


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 ]]


1
깔끔합니다. 가장 즉각적인 표현 은 아니지만 깔끔합니다.
kayleeFrye_onDeck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.