From: Jason Creighton Date: 2003-09-18T08:32:00+09:00 Subject: Re: How do I use grep with the Shell class On Wed, 17 Sep 2003 14:13:57 +0900 Mark Wilson wrote: > Hello, > > I'm trying to do the following in Ruby using the Shell class: > > From the command line, I would write this: > > % grep -l PATTERN * | xargs mv --target-directory=DIRECTORY > > Because I have many directories I want to visit in turn, I've tried the > following: > > directories.each do |d| > shell = Shell.cd(d) > string = String.new > shell.transact do > string = shell.grep("-l", "PATTERN", "*") # => the '*' is not > expanded; > # > grep: *: No such file or directory > end > array = string.split > array.each { |e| File.move(e, "DIRECTORY") } > end > > The above does not work. Does anyone have any insight (or alternate > ways to accomplish the same purpose in Ruby)? Something like this, perhaps? directories.each do |d| Dir["#{d}/*"].each do |filename| f = File.open(filename) if f.detect { |line| line =~ /PATTERN/ } File.rename(filename, File.join("DIRECTORY", File.basename(filename))) end f.close() end end Using the command line would probably be easier for a quick job like this, however. (Unless you really need to do this from within Ruby) Jason Creighton