如何循环文件夹和重命名文件

时间:2016-08-24 18:21:32

标签: ruby file rename

我在这样的文件夹中循环

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

我得images/SW/SW-9.tif,我想更改为images/SW/SW-9.png而不重复,应删除.tif文件。

我想将所有文件从.tif重命名为.png

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这应该这样做:

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