2014-11-02 4 views
1

을 삭제 I이 현재 디렉토리에있는 이미지의 일부 이름 변경을 수행 코드 :루비 이름 바꾸기 파일은 파일

puts Dir["**/*"].length 

folder_path = Dir.pwd 

filenames = Dir.glob("*.png") 

filenames.each_with_index do |filename, index| 
    File.rename(filename, folder_path + "/#{index}" + File.extname(filename)) 
end 

내 콘솔 :

98 
$ ruby rename.rb 
90 
$ ruby rename.rb 
90 
$ ruby rename.rb 
90 
$ ruby rename.rb 
82 
$ ruby rename.rb 
82 
$ ruby rename.rb 
74 
$ ruby rename.rb 
74 
$ ruby rename.rb 
66 

내가 운영하는 제 3 회 시간처럼 보인다 일부 이미지는 진행 과정에서 삭제됩니다. 파일이 이미 그런 식으로 존재하는 경우

+0

관련이 없지만'# {index.to_s} '는 중복됩니다. '# {} '을 사용하면'to_s'가 이미 호출되므로'index.to_s.to_s'를 효과적으로 수행 할 수 있습니다. 그냥'# {index} '를 사용하십시오. – meagar

+0

@meagar가 업데이트되었습니다. 스크립트를 업데이트 할 때마다 "/ sa # {index}"라는 새 파일 이름으로 실행하면 파일이 삭제되지 않습니다. –

+0

"코드가 실행 된 3 번째 시간에는 일부 이미지가 진행 과정에서 삭제 된 것 같습니다." - 삭제 됐어? 너는 그렇게 생각한다. 이 코드를 반복해서 실행할 수 있으며 PNG의 0.png, 1.png, 2.png 등의 이름을 모두 지어줍니다. –

답변

1

파일을 삭제할 수 있습니다 스크립트가 같은 이름의 기존 파일을 삭제하는 것입니다 수있는 유일한 방법 ... 당신은 확인할 수 있습니다

puts Dir["**/*"].length 

folder_path = Dir.pwd 

filenames = Dir.glob("*.png") 

filenames.each_with_index do |filename, index| 
    new_name= folder_path + "/#{index}" + File.extname(filename) 
    raise "#{new_name} already exists" if File.exists?(new_name) 
    File.rename(filename, new_name) 
end 
0

당신이 경우 당신은 같은 것을 할 수 있습니다

folder_path = Dir.pwd 
filenames = Dir.glob('*.png') 

filenames.each_with_index do |filename, index| 
    new_name = folder_path + "/#{index}" + File.extname(filename) 
    unless File.exists?(new_name) 
     File.rename(filename, new_name) 
    else 
     index += 1 
     new_name = folder_path + "/#{index}" + File.extname(filename) 
     File.rename(filename, new_name) 
    end 
end 
+0

두 번째 이름 바꾸기 전에 검사가 없으므로이 스크립트는 여전히 파일을 덮어 쓸 수 있습니다. – ThomasSevestre