目录中的Ruby重命名文件删除文件

时间:2014-11-02 17:56:59

标签: ruby

我有这个代码在当前目录中重命名图像:

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次运行代码时,某些图像会在进度中被删除。

2 个答案:

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

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