# Questions about copying using FileUtils

**URL:** <https://www.ruby-forum.com/t/questions-about-copying-using-fileutils/58321>\
**Category:** Ruby\
**Created:** [April 20, 2006, 4:42pm UTC](https://www.ruby-forum.com/t/questions-about-copying-using-fileutils/58321 "2006-04-20T16:42:13Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![bodikp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e79b87/32.png) [@bodikp](https://www.ruby-forum.com/u/bodikp)\
**Post date:** [April 20, 2006, 4:42pm UTC](https://www.ruby-forum.com/t/questions-about-copying-using-fileutils/58321/1 "2006-04-20T16:42:13Z")

</div>

Hello,  
Can someone please help me with the following script? It doesn’t work,  
and yields the message below this script. My “puts” is just for testing,  
to see if it sees the files. The “puts” works fine when I don’t include  
the copy line just below it. I’m just copying original files to files of  
the same name, with different extensions. I could as well be opening new  
files of these new names, not just copying them.

As a related question, do all iterators, like my “each” below, require  
an “end?”

Thanks a lot.

* * *

## Dir.chdir(“c:/scripts/ruby/temp”) require ‘fileutils’ include FileUtils::Verbose psfiles = Dir.glob(’\*.ps’) psfiles.collect!{ |psfile| File.basename(psfile, ‘.ps’) } psfiles.each do |psfile| puts psfile FileUtils.cp(“psfile”, psfile + “.pageinfo”) end

## gives me this . . . test1 c:/ruby/lib/ruby/1.8/fileutils.rb:1182:in `stat': No such file or directory - ps file (Errno::ENOENT) from c:/ruby/lib/ruby/1.8/fileutils.rb:1182:in`lstat’ from c:/ruby/lib/ruby/1.8/fileutils.rb:1160:in `stat' from c:/ruby/lib/ruby/1.8/fileutils.rb:1242:in`copy\_file’ from c:/ruby/lib/ruby/1.8/fileutils.rb:459:in `copy_file' from c:/ruby/lib/ruby/1.8/fileutils.rb:383:in`cp’ from c:/ruby/lib/ruby/1.8/fileutils.rb:1377:in `fu_each_src_dest' from c:/ruby/lib/ruby/1.8/fileutils.rb:1393:in`fu\_each\_src\_dest0’ from c:/ruby/lib/ruby/1.8/fileutils.rb:1375:in `fu_each_src_dest' from c:/ruby/lib/ruby/1.8/fileutils.rb:382:in`cp’ from c:/scripts/ruby/images/check\_indexes.rb:10 from c:/scripts/ruby/images/check\_indexes.rb:8

---

<div class="post-metadata">

**Author:** ![bodikp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e79b87/32.png) [@bodikp](https://www.ruby-forum.com/u/bodikp)\
**Post date:** [April 20, 2006, 4:59pm UTC](https://www.ruby-forum.com/t/questions-about-copying-using-fileutils/58321/2 "2006-04-20T16:59:15Z")

</div>

> > > > > “P” == Peter B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

P\> Dir.chdir(“c:/scripts/ruby/temp”)  
P\> require ‘fileutils’  
P\> include FileUtils::Verbose  
P\> psfiles = Dir.glob(‘\*.ps’)  
P\> psfiles.collect!{ |psfile| File.basename(psfile, ‘.ps’) }  
P\> psfiles.each do |psfile|  
P\> puts psfile  
P\> FileUtils.cp(“psfile”, psfile + “.pageinfo”)  
^^^^^^^^

Why do you use " here ? ruby search the file “psfile” and not the name  
given in the variable `psfile’

Just write

FileUtils.cp(psfile, psfile + “.pageinfo”)

P\> end

P\> As a related question, do all iterators, like my “each” below,  
require  
P\> an “end?”

This is `do' which need an `end’

You can write

1.times do |i|  
puts i  
end

or

1.times {|i|  
puts i  
}

Guy Decoux

---

<div class="post-metadata">

**Author:** ![bodikp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e79b87/32.png) [@bodikp](https://www.ruby-forum.com/u/bodikp)\
**Post date:** [April 20, 2006, 5:01pm UTC](https://www.ruby-forum.com/t/questions-about-copying-using-fileutils/58321/3 "2006-04-20T17:01:40Z")

</div>

Peter B. wrote:

> psfiles.each do |psfile|  
> puts psfile  
> FileUtils.cp(“psfile”, psfile + “.pageinfo”)  
> end

psfile is a variable and should not be quoted. Use

```
  FileUtils.cp(psfile, psfile + ".pageinfo")
```

---

<div class="post-metadata">

**Author:** ![bodikp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e79b87/32.png) [@bodikp](https://www.ruby-forum.com/u/bodikp)\
**Post date:** [April 20, 2006, 5:05pm UTC](https://www.ruby-forum.com/t/questions-about-copying-using-fileutils/58321/4 "2006-04-20T17:05:28Z")

</div>

> > > > > “P” == Peter B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

P\> psfiles = Dir.glob(‘\*.ps’)  
P\> psfiles.collect!{ |psfile| File.basename(psfile, ‘.ps’) }  
P\> psfiles.each do |psfile|  
P\> puts psfile  
P\> FileUtils.cp(“psfile”, psfile + “.pageinfo”)

There is another problem, you have removed the suffix .ps with  
File::basename, best to write it

```
  FileUtils.cp(psfile + ".ps", psfile + ".pageinfo")

```

Guy Decoux

---

<div class="post-metadata">

**Author:** ![bodikp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e79b87/32.png) [@bodikp](https://www.ruby-forum.com/u/bodikp)\
**Post date:** [April 20, 2006, 5:22pm UTC](https://www.ruby-forum.com/t/questions-about-copying-using-fileutils/58321/5 "2006-04-20T17:22:17Z")

</div>

ts wrote:

> > > > > > “P” == Peter B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:
> 
> P\> psfiles = Dir.glob(‘\*.ps’)  
> P\> psfiles.collect!{ |psfile| File.basename(psfile, ‘.ps’) }  
> P\> psfiles.each do |psfile|  
> P\> puts psfile  
> P\> FileUtils.cp(“psfile”, psfile + “.pageinfo”)
> 
> There is another problem, you have removed the suffix .ps with  
> File::basename, best to write it
> 
> ```
> FileUtils.cp(psfile + ".ps", psfile + ".pageinfo")
> 
> ```
> 
> Guy Decoux

Now that worked! Thank you!

---

<div class="post-metadata">

**Author:** ![bodikp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e79b87/32.png) [@bodikp](https://www.ruby-forum.com/u/bodikp)\
**Post date:** [April 20, 2006, 5:20pm UTC](https://www.ruby-forum.com/t/questions-about-copying-using-fileutils/58321/6 "2006-04-20T17:20:58Z")

</div>

ts wrote:

> > > > > > “P” == Peter B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:
> 
> P\> Dir.chdir(“c:/scripts/ruby/temp”)  
> P\> require ‘fileutils’  
> P\> include FileUtils::Verbose  
> P\> psfiles = Dir.glob(‘\*.ps’)  
> P\> psfiles.collect!{ |psfile| File.basename(psfile, ‘.ps’) }  
> P\> psfiles.each do |psfile|  
> P\> puts psfile  
> P\> FileUtils.cp(“psfile”, psfile + “.pageinfo”)  
> ^^^^^^^^
> 
> Why do you use " here ? ruby search the file “psfile” and not the name  
> given in the variable `psfile’
> 
> Just write
> 
> FileUtils.cp(psfile, psfile + “.pageinfo”)
> 
> P\> end
> 
> P\> As a related question, do all iterators, like my “each” below,  
> require  
> P\> an “end?”
> 
> This is `do' which need an `end’
> 
> You can write
> 
> 1.times do |i|  
> puts i  
> end
> 
> or
> 
> 1.times {|i|  
> puts i  
> }
> 
> Guy Decoux

Thanks, Guy. I re-did that line, but get the same results.

FileUtils.cp(psfile, psfile + “.pageinfo”)

OK. So, it’s the “do” that needs the “end,” not the “each.”
