2016-08-24 119 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