2013-08-08 1 views
0

단일 파일의 확장명을 바꾸는 효율적인 방법을 알아 내려고하고 있습니다. 나는 온라인에서 많은 방법을 살펴 보았지만, 모두는 기본 파일 인 .each을 사용하여 대량으로 파일을 변환하는 것으로 보인다. 이 블록에서 FileUtils가 많이 사용되었다는 것을 알았지 만 사용 경로가 임박했다는 이유로 디렉토리 경로가 주어 졌다고 생각했습니다. 나는 대량 방법을 수행하는 방법을 알고, 내가 승, 개인 방법에 대해 단지 모르겠어요 /의 라인을 따라 뭔가 : 데프 convert_file_extension (INPUT_FILE) ... 끝Ruby를 통해 개별 파일의 확장명을 어떻게 바꿉니 까?

어떤 도움이 크게 감사합니다!

+1

파일을 grepping하고 각각을 개별적으로 이름을 바꾸는 것보다 더 좋은 방법이있을 것이라고 생각합니다. –

+0

아마도 대량 변환의 단점은 변경할 특정 파일을 선택할 수 없다는 것입니다. – T145

답변

0
def change_ext(fname, new_ext) 
    i = fname.rindex(".") 
    i ? (fname[0...i] + new_ext) : (fname + new_ext) 
end 

puts change_ext("/usr/local/file", ".xyz") 
puts change_ext("/usr/local/file.txt", ".xyz") 


--output:-- 
/usr/local/file.xyz 
/usr/local/file.xyz 
+0

굉장! 입력 파일의 내용을 덮어 쓸 가능성이 있습니까? 변경 사항이 적용되도록 파일이 자동 저장됩니까? – T145

+0

ruby ​​프로그램에서 문자열을 변경하면 컴퓨터의 파일에 아무런 영향을 미치지 않습니다. your_name이라는 변수를 변경하면 카운티 등록 기관의 출생 증명서가 변경 될뿐입니다. 그러나 File 클래스에는 컴퓨터에서 파일 이름을 변경하는 rename이라는 메서드가 있습니다. – 7stud

+0

파일에 쓰지 않아 파일의 내용을 덮어 쓸 가능성이 없습니다. '/ dir1/dir2/abc'라는 이름의 두 개의 파일이있는 경우, 잠재적 인 문제가 있습니다 :'File.rename ("oldname", "newname")' – 7stud

1

이 문은 트릭을 수행합니다 @ 7stud & @ostapische에

def self.rename_file(input_file, output_file) 
    File.rename(input_file, output_file) if !File.exist?(output_file) 
end 

감사합니다!

0

위의 솔루션에 추가 : 당신은 개별 구성 요소에 파일 경로를 분해 할 수

: File.dirname 디렉토리 부분을 산출, File.extname 확장자를 반환합니다. File.basename은 확장명이 제거 된 파일 이름 만 제공합니다 (선택 사항). 이 방법으로 새 ​​파일 이름을 쉽게 생성 할 수 있습니다. 물론 실제로 파일 이름을 변경하려면 File.rename을 사용하십시오.

관련 문제