Lets define a write() method in File class :

class File
def self.write(name)
data = yield
self.open(name,"w") { |f| f.write( data ) }
end
end


Now code with Dir[exp] , File.read(), File.write() :

Dir[ARGV[0]].each() do |file_name|
file_content = File.read(file_name)
content_mofified = file_content.gsub(/a/,"@")
File.write(file_name) { content_mofified }
end


Ruby -is- Block and meta-programming
without this, it's a python/php/...


Or, more functional :

Dir[ARGV[0]].each() { |file_name|
File.write(file_name) { File.read(file_name).gsub(/a/,"@") }
}


This is the best form, because it don't use local variable
==> provable
==> threadable without danger


Read more: http://feeds.dzone.com/~r/dzone/snippets/~3/HGEsM0DbyRo/12899