지정된 디렉토리의 존재 여부에 따라 Subversion URL을 자동으로 체크 아웃하거나 업데이트하는 스크립트를 작성하려고합니다.
어떤 이유로 든 내 코드가 작동하지 않고 false 인 경우에도 항상 true를 반환 합니다 .
def directory_exists?(directory)
return false if Dir[directory] == nil
true
end
내가 뭘 잘못하고 있죠?
답변
당신이 찾고있는 파일이 있는지 여부를 중요한 경우 디렉토리 뿐 아니라 파일, 당신은 사용할 수 있습니다 File.directory?
또는 Dir.exist?
. 파일이 존재하고 디렉토리 인 경우에만 true를 리턴합니다.
게다가, 메소드를 작성하는보다 관용적 인 방법은 Ruby가 메소드 내에서 마지막 표현식의 결과를 자동으로 리턴한다는 사실을 이용하는 것입니다. 따라서 다음과 같이 작성할 수 있습니다.
def directory_exists?(directory)
File.directory?(directory)
end
이 경우 방법을 사용할 필요는 없습니다.
답변
다음 Dir::exist?
과 같이 사용할 수도 있습니다 .
Dir.exist?('Directory Name')
true
‘Directory Name’이 디렉토리인지 여부를 반환 합니다false
. 1
답변
다른 모든 대답은 맞지만 사용자의 홈 디렉토리에서 디렉토리를 확인하려고하면 문제가있을 수 있습니다. 확인하기 전에 상대 경로를 확장했는지 확인하십시오.
File.exists? '~/exists'
=> false
File.directory? '~/exists'
=> false
File.exists? File.expand_path('~/exists')
=> true
답변
File.exist?("directory")
Dir[]
배열을 반환하므로 결코 그렇지 않습니다 nil
. 당신이 당신의 방식으로 그것을하고 싶다면, 당신은 할 수 있습니다
Dir["directory"].empty?
이는 반환 true
이 경우 되지 않았습니다 발견했다.
답변
당신은 사용할 수 있습니다 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 ]]