2012-10-20 4 views
2

많은 서브 디렉토리가있는 디렉토리가 있고 각각의 서브 디렉토리에는 테스트 할 다른 버전의 프로그램이 있습니다.Ruby moving directory error :

대부분의 경우 코드는 성공적이지만 이미 존재하기 때문에 디렉토리를 상위 디렉토리로 이동하지 않을 수도 있습니다.

mv ~/test/version-1/01-spec ~/test 
~/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/fileutils.rb:509:in `block in mv': File exists - ~/test (Errno::EEXIST) 
     from ~/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/fileutils.rb:1423:in `block in fu_each_src_dest' 
     from ~/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/fileutils.rb:1437:in `fu_each_src_dest0' 
     from ~/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/fileutils.rb:1421:in `fu_each_src_dest' 
     from ~/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/fileutils.rb:504:in `mv' 

UNIX mv 명령은 유효하며,이 예외가 발생 된 후에 실행될 수있다. 내가 뭔가 잘못하고 있는거야?

답변

1

오류 메시지는 ~/test이 이미 존재하므로 실패하며, FileUtils은 기본적으로 오류가 발생하지 않습니다. 덮어 쓰기에 신경 쓰지 않는다면 force 매개 변수를 전달할 수 있습니다.

FileUtils.mv(test_spec, target_dir, :verbose => true, :force => true) 
+0

왜 무작위로 실패합니까? 그것은 5 번의 반복 작업을 수행 할 수 있으며 6 번째 작업에서 실패합니다. – Tombart

+0

@Tombart : file_utils 소스 (https://github.com/ruby/ruby/blob/trunk/lib/fileutils.rb#L583) 대상 항목이 디렉토리 일 때 이것을 봅니다. 어느 것이 구체적으로 성공하고 어느 것이 1을 던집니까? – pje

+0

': force'는 그것을 풀지 않지만'system ("mv", spec_dir, current_dir)'을 실행하면 괜찮습니다. Ruby-1.9.3-p194를 실행 중이므로 코드가 헤드 버전과 약간 다를 수 있습니다. – Tombart