Ruby重命名目录中的文件会删除文件
我有以下代码,可以对当前目录中的图像进行重命名:Ruby重命名目录中的文件会删除文件,ruby,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 r
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
似乎在我第三次运行代码时,一些图像被删除了。脚本删除文件的唯一方法是删除同名的现有文件。。。您可以检查文件是否已经存在,如下所示:
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
如果要重命名文件,即使存在同名文件,也可以执行以下操作:
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
不相关,但
{index.to_s}
是冗余的。使用{}
已经调用了to_s
,因此您实际上是在执行index.to_s.to_s
。只需使用{index}
@meagar updated。如果每次运行脚本时都使用新的文件名更新脚本,例如“/sa#{index}”文件不会被删除。似乎在第三次运行代码时,某些图像会在运行过程中被删除。“-它们被删除了吗?你说好像是这样。我可以一遍又一遍地运行这段代码,它所做的一切命名PNG的0.PNG、1.PNG、2.PNG等似乎都很好。@NickVeys它们在第三次被删除。因为在第二次重命名之前没有检查,所以这个脚本仍然可以覆盖文件。