Update: Mon Feb 9 05:38:35 CST 2009: Some minor changes, cleaned up the code
#!/usr/bin/env ruby
%w[rubygems ftools digest/md5].each{|lib| require lib}
#Dir.glob("*.{mp3,flac,mp4,shn,mpc,wav}").each do |name|
Dir.glob("*").each do |name|
# downcase all letters and replace the following char
# classes with an underscore:
# whitespace
# parens
# semi-colons
# dashes
# brackets
# single spaces
nom =
name.gsub(/([A-Z])/){ |letter|
letter.downcase
} \
.gsub(/\s|\(|\)|;|-|\[|\]/,'_') \
.gsub(/__+/,'_') \
.gsub(/_\./,'.') \
.gsub(/'/,'')
if(nom != name)
digest = Digest::MD5.hexdigest(File.read(name))
print "#{name} => #{nom} . . . "
File.copy("#{name}", "#{nom}")
digest_copy = Digest::MD5.hexdigest(File.read("#{nom}"))
if(digest == digest_copy)
puts "OK!"
File.unlink("#{name}")
else
File.unlink("#{nom}")
puts "ERROR: #{digest} != #{digest_copy}! ABORTED"
exit
end
end
end