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!

...

20. 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

···

--
Posted via http://www.ruby-forum.com/.

Peter Bailey 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!

...

20. 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

···

--
Posted via http://www.ruby-forum.com/\.

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")}

···

On 5/14/07, Peter Bailey <pbailey@bna.com> 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!

...

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

--
Rick DeNatale

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

David Mullet wrote:

Peter Bailey 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!

...

20. 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

···

--
Posted via http://www.ruby-forum.com/\.

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.

···

On 5/14/07, Rick DeNatale <rick.denatale@gmail.com> wrote:

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

--
Rick DeNatale

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