What is it about File.rename?

Hello,
I’m going a bit nuts with a script of mine that doesn’t seem to behave
with file renaming. I’ve got 172 files in a directory, all with the
extension “.pstxt.”

  1. Dir.glob("*.pstxt").each do |pstxtfile|
  2. $ps2kfile = File.basename(pstxtfile, “.pstxt”)
  3. $filetime = File.stat(pstxtfile).mtime
  4. #$filetime = $filetime.to_s.gsub!(/ -0500.*$/, “”)
  5. #$totalpages = IO::readlines(pstxtfile).to_s
  6. #$totalpages = $totalpages.to_s.chomp!

  1. File.rename(pstxtfile, pstxtfile.to_s.gsub(/(^.*).pdf.pstxt/,
    “ps2k_#{$1}.pstxt”))

The above works fine and renames all 172 files in the directory at
present. But, if I uncomment line number 4 and/or 5 and/or 6, it runs
and gives me the following one entry remaining in my directory:

ps2k_.pstxt

All the 172 files are gone! This doesn’t make sense to me. The
“filetime” variables are to be used in something completely different
and I don’t see why they’re affecting this simple renaming of files.

Thanks,
Peter

Peter B. wrote:

Hello,
I’m going a bit nuts with a script of mine that doesn’t seem to behave
with file renaming. I’ve got 172 files in a directory, all with the
extension “.pstxt.”

  1. Dir.glob(“*.pstxt”).each do |pstxtfile|
  2. $ps2kfile = File.basename(pstxtfile, “.pstxt”)
  3. $filetime = File.stat(pstxtfile).mtime
  4. #$filetime = $filetime.to_s.gsub!(/ -0500.*$/, “”)
  5. #$totalpages = IO::readlines(pstxtfile).to_s
  6. #$totalpages = $totalpages.to_s.chomp!

  1. File.rename(pstxtfile, pstxtfile.to_s.gsub(/(^.*).pdf.pstxt/,
    “ps2k_#{$1}.pstxt”))

The above works fine and renames all 172 files in the directory at
present. But, if I uncomment line number 4 and/or 5 and/or 6, it runs
and gives me the following one entry remaining in my directory:

ps2k_.pstxt

All the 172 files are gone! This doesn’t make sense to me. The
“filetime” variables are to be used in something completely different
and I don’t see why they’re affecting this simple renaming of files.

Thanks,
Peter

Just a thought…

If I recall correctly, gsub! returns nil if no substitution was made.

Does changing…

$filetime = $filetime.to_s.gsub!(/ -0500.*$/, “”)

…to…

$filetime = $filetime.to_s.gsub(/ -0500.*$/, “”)

…have any effect?

David

On 5/14/07, Peter B. [email protected] wrote:

  1. #$totalpages = $totalpages.to_s.chomp!

  1. File.rename(pstxtfile, pstxtfile.to_s.gsub(/(^.*).pdf.pstxt/,
    “ps2k_#{$1}.pstxt”))

I think that your problem is here. String#gsub with a string
replacement doesn’t provide the use of $1 in the replacement string.
I’m not sure why it’s working when it does. Something before thoses
lines seems to be setting $1 to what you are expecting, Line 4 is
going to reset $1 to nil since it doesn’t capture anything.

Try replacing line 20 with either
File.rename(pstxtfile, pstxtfile.to_s.gsub(/(^.*).pdf.pstxt/,
“ps2k_\1.pstxt”))

or

File.rename(pstxtfile, pstxtfile.to_s.gsub(/(^.*).pdf.pstxt/)
{“ps2k_#{$1}.pstxt”)}


Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

On 5/14/07, Rick DeNatale [email protected] wrote:

Try replacing line 20 with either
File.rename(pstxtfile, pstxtfile.to_s.gsub(/(^.*).pdf.pstxt/,
“ps2k_\1.pstxt”))

Oops that should be “ps2k_\1.pstxt” or ‘ps2k_\1.pstxt’ The double
quote string will interpret a single slash as an escape of the next
character.


Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

David M. wrote:

Peter B. wrote:

Hello,
I’m going a bit nuts with a script of mine that doesn’t seem to behave
with file renaming. I’ve got 172 files in a directory, all with the
extension “.pstxt.”

  1. Dir.glob(“*.pstxt”).each do |pstxtfile|
  2. $ps2kfile = File.basename(pstxtfile, “.pstxt”)
  3. $filetime = File.stat(pstxtfile).mtime
  4. #$filetime = $filetime.to_s.gsub!(/ -0500.*$/, “”)
  5. #$totalpages = IO::readlines(pstxtfile).to_s
  6. #$totalpages = $totalpages.to_s.chomp!

  1. File.rename(pstxtfile, pstxtfile.to_s.gsub(/(^.*).pdf.pstxt/,
    “ps2k_#{$1}.pstxt”))

The above works fine and renames all 172 files in the directory at
present. But, if I uncomment line number 4 and/or 5 and/or 6, it runs
and gives me the following one entry remaining in my directory:

ps2k_.pstxt

All the 172 files are gone! This doesn’t make sense to me. The
“filetime” variables are to be used in something completely different
and I don’t see why they’re affecting this simple renaming of files.

Thanks,
Peter

Just a thought…

If I recall correctly, gsub! returns nil if no substitution was made.

Does changing…

$filetime = $filetime.to_s.gsub!(/ -0500.*$/, “”)

…to…

$filetime = $filetime.to_s.gsub(/ -0500.*$/, “”)

…have any effect?

David

http://rubyonwindows.blogspot.com

Thanks, David. Well, yeh, it does appear that the filetime stuff was
messing me up. This is fairly old code, for me, meaning 3 or 4 months
old, so, I modernized that filetime stuff a bit and now it seems to
work! I basically just simplified it by changing:

$filetime = File.stat(pstxtfile).mtime

to

$filetime = File.mtime(pstxtfile)

Thanks again!
-Peter