#! /usr/bin/env ruby require 'find' bad_str = ":<>\\|*?\"" bad_files = Array.new Find.find(ARGV[0]) do |file| bad_files.push file end # reverse array so bad directories come after the files bad_files.reverse! bad_files.each do |file| basename = File.basename(file) if basename.count(bad_str) > 0 dirname = File.dirname(file) new_file = File.join(dirname, basename.tr(bad_str, '_')) puts [file, ' -> ', new_file].join File.rename( file, new_file ) end end