2016-08-24 74 views
0

我在文件夾循環,這樣如何通過文件夾循環和重命名文件

Dir.glob('**/*.tif').each do |image_file| 

我得到images/SW/SW-9.tif,我想改變images/SW/SW-9.png而不是重複,.tif文件應予以刪除。

我想重命名所有從文件的.tif到png格式

回答

0

Dir.glob返回的完整路徑。

第1步:GSUB .tif.png

第2步:檢查新名稱是不是重複

第3步:使用mv


Dir.glob('./**/*.tif').each do |path| 
    dest_path = path.gsub(".tif", ".png") 
    unless File.exists?(dest_path) 
    `mv "#{path}" "#{dest_path}"` 
    end 
end 

編輯的與評論

的建議
Dir.glob('./**/*.tif').each do |path| 
    dest_path = path.gsub(/\.tif\z/, '.png') 
    unless File.exists?(dest_path) 
    File.rename(path, dest_path) 
    end 
end 
+2

'File.rename(路徑,dest_path)',而不是脫殼而出。此外,'gsub(/ \。tif \ Z /,'.png')'不會意外重命名擴展名以外的內容。 –

+1

這應該是'\ z',因爲我相信你知道。 –

+0

我試過了。我仍然有重複的.tiff,並且新的png文件的路徑在文件夾之外 – suyesh

0

這應做到:

Dir.glob('./**/*.tif').each { |img| File.rename(img, img.gsub(/tif$/, 'png')) unless File.exists?(img.gsub(/tif$/, 'png')) } 
+0

值得分成多行,所以發生了什麼更清晰。 – tadman