2012-03-04 2 views
0

Ruby에서 파일 이름을 바꿀 때 콜론을 어떻게 피합니까?Ruby의 이름 바꾸기 방법. 콜론 이스케이프

new_filename = "" 
counter = 0 
Dir.glob(folder_path + "/*").each do |f| 
    numbering = names.index(names.values.sort[counter]) 
    new_filename = numbering + " - " + names.values.sort[counter] 
    puts "New file name: " + new_filename 
    File.rename(f, folder_path + "/" + new_filename + File.extname(f)) 
    counter += 1 
end 

puts "Renaming complete." 

new_filename의 출력은, 수정 예 :

I 코드 다음있다 (이름이 이미 기입 데이터 해쉬이다) "Foo - Bar: Foo.txt". 파일의 이름을 바꿀 때 파일의 형식은 "Foo - Bar/ Foo.txt"입니다.

백 슬래시로 콜론을 사용하여 이스케이프 처리를 시도했지만 작동하지 않는 것 같습니다. 내 출력이 다음과 같습니다 : "Foo - Bar/\ Foo.txt".

파일 이름을 바꾸기 위해 문자열에 콜론을 사용할 수 있습니까?

+0

어떤 시스템을 사용하십니까? Windows에서는 파일 이름에':'을 사용할 수 없습니다. 일부 OS (필자는 Mac)가 폴더의 구분 기호로':'를 사용한다고 생각합니다. Ruby는':'를 새로운 폴더로 해석합니다. – knut

+2

@knut : 오래된 맥 오에스는 폴더에':'를 사용하고, OSX는 다른 유닉스와 마찬가지로'/'를 사용합니다. 콜론이있는 파일 이름은 쉘에있는 그대로 표시되지만 Finder는 표시 목적으로 콜론을 슬래시로 변환합니다. –

+2

@muistooshort : 기술적으로, 나는 아직도 HFS + - IIRC의 분리 기호로 사용되지만 POSIX 수준에서 "/"로 바뀌 었습니다 (POSIX 분리 기호이기 때문에). 그런 다음 GUI 계층이이를 바꿉니다 뒤로. – Chuck

답변

0

참고 - NTFS에서는 콜론이 동일한 파일의 별도 스트림을 식별합니다 ... "Foo Bar : Foo.txt"는 "Foo Bar"파일, "Foo.txt"파일을 식별합니다. 참조 "대체 데이터 스트림"(현재 http://support.microsoft.com/kb/105763). AFIK이 기능은 실제로 널리 사용되지는 않지만 타사 데이터로 파일을 태그 지정하는 데 사용되는 것을 보았습니다. (스트림 * : sha1에서 이중 ID를 위해 파일의 sha1을 저장하는 데 사용합니다.)