Find.prune if ( filename[-5,5] != ".java") is odd?

Hi all.

Today I had to do a recursive touch on all Java files in a certain directory. Since I recently found that super cool ruby Find example I figured I'd use that. However, my first try at a solution didn't work. In the end I just changed the script a bit and now it does work as intended, but... I really don't understand why the first version of the example didn't work... It's the Ruby 1.8.6 1-click-installer version, if that matters.

require "find"

Find.find( "c:/usd70.senior.2008.04.14.copy" ) do |filename|
  Find.prune if filename == "."
  Find.prune if (filename.size < 6) # shortest interesting filename == "a.java"

  # first try, if I don't comment-out the following line it just does not work as intended...
  #Find.prune if ( filename[-5,5] != ".java") # string doesn't end with ".java" ?
  #`touch #{filename}`

  `touch #{filename}` if filename[-5,5] == ".java"

end

What about:

Dir["c:/usd70.senior.2008.04.14.copy/**/*.java"].each { |f| `touch #{f}` }

Jason

···

On Fri, Apr 25, 2008 at 8:28 AM, Martin Elzen <martinelzen@hotmail.com> wrote:

Hi all.

Today I had to do a recursive touch on all Java files in a certain directory. Since I recently found that super cool ruby Find example I figured I'd use that. However, my first try at a solution didn't work. In the end I just changed the script a bit and now it does work as intended, but... I really don't understand why the first version of the example didn't work... It's the Ruby 1.8.6 1-click-installer version, if that matters.

require "find"

Find.find( "c:/usd70.senior.2008.04.14.copy" ) do |filename|
  Find.prune if filename == "."
  Find.prune if (filename.size < 6) # shortest interesting filename == "a.java"

  # first try, if I don't comment-out the following line it just does not work as intended...
  #Find.prune if ( filename[-5,5] != ".java") # string doesn't end with ".java" ?
  #`touch #{filename}`

  `touch #{filename}` if filename[-5,5] == ".java"

end

Find.prune is the wrong tool, period.

Find.find will yield all of the subdirectory names as well, and running
Find.prune on a subdirectory will prevent Find from descending into that
subdirectory (thereby saving time and ignoring its contents). But
Find.prune will *not* jump to the next iteration of the loop. It will
continue to the end of the block before moving on to the next file.

So I think you want
next if ...
instead.

···

On Fri, 25 Apr 2008 07:28:42 -0500, Martin Elzen wrote:

Hi all.

Today I had to do a recursive touch on all Java files in a certain
directory. Since I recently found that super cool ruby Find example I
figured I'd use that. However, my first try at a solution didn't work.
In the end I just changed the script a bit and now it does work as
intended, but... I really don't understand why the first version of the
example didn't work... It's the Ruby 1.8.6 1-click-installer version,
if that matters.

require "find"

Find.find( "c:/usd70.senior.2008.04.14.copy" ) do |filename|
  Find.prune if filename == "."
  Find.prune if (filename.size < 6) # shortest interesting filename ==
  "a.java"

  # first try, if I don't comment-out the following line it just does
  not work as intended... #Find.prune if ( filename[-5,5] != ".java") #
  string doesn't end with "java" ? #`touch #{filename}`

  `touch #{filename}` if filename[-5,5] == ".java"

end

--
Ken (Chanoch) Bloom. PhD candidate. Linguistic Cognition Laboratory.
Department of Computer Science. Illinois Institute of Technology.
http://www.iit.edu/~kbloom1/