So, I’m working on some DAM (digital asset management) scripts, and I
want
to make sure that I don’t overwrite any files when I move or copy them.
I was about to start working on a move method that would add a number to
the destination filename if the name already exists. (IE
mv(‘pma_20090720_1234.jpg’, ‘archive/2009/07’) might create an
'archive/2009/07/pma_20090720_1234-1.jpg if pma_20090720_1234.jpg
exists.)
Question: is there already a module that can do that?
Thanks. That’s a good start. While I think I’ll be working one file at a
time, FileUtils.mv can take a glob of filenames as the source, and a
directory as the destination–so I need to make sure I check every file
individually. If I end up with something that’s not too ugly, I’ll post
it.
Here’s what I came up with (incorporating your code, pharrington):
def safe_move(source, dest, digits=2 )
source.to_a.each do |src|
if File.directory?(dest)
d = File.join(dest, File.basename(src) )
else
d = dest
end
count = 0
unique_name = d
while File.exists?(unique_name)
count += 1
ext = File.extname(d)
unique_name = File.join(
File.dirname(d),
File.basename(d, ext) +
sprintf("_%0#{digits}d", count) +
ext )
end
d = unique_name
return FileUtils.mv(src, d)
end
end
Paul
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.