# Iterators and arrays

**URL:** <https://www.ruby-forum.com/t/iterators-and-arrays/133659>\
**Category:** Ruby\
**Created:** [April 2, 2008, 11:53am UTC](https://www.ruby-forum.com/t/iterators-and-arrays/133659 "2008-04-02T11:53:04Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![owc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/74df32/32.png) [@owc](https://www.ruby-forum.com/u/owc)\
**Post date:** [April 2, 2008, 11:53am UTC](https://www.ruby-forum.com/t/iterators-and-arrays/133659/1 "2008-04-02T11:53:04Z")

</div>

I want to use each index of the array and loop it in such a way that the  
path names can be passed into Dir so that i can carry out multiple  
copies from different sources. unfortunately, it showed error while  
trying to run the script. Any suggestions?

$DEST=“U:/test1”

source=[“C:/movtest/testing”, “C:/movtest”, “U:/movtest”,  
“U:/movtest/new”, “U:/movtest/new1”]  
j=source.length - 1  
i= -1

while i\<j

Dir.chdir(source[i])  
print Dir.getwd  
FileUtils.cp\_r Dir.glob(‘2008\*’), $DEST  
i+=1

end

---

<div class="post-metadata">

**Author:** ![owc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/74df32/32.png) [@owc](https://www.ruby-forum.com/u/owc)\
**Post date:** [April 2, 2008, 1:18pm UTC](https://www.ruby-forum.com/t/iterators-and-arrays/133659/2 "2008-04-02T13:18:47Z")

</div>

On Wed, Apr 2, 2008 at 11:53 AM, Clement Ow  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> ## j=source.length - 1
> 
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).

You seem to get confused with the indexes, but the idiomatic Ruby code  
would rather look like

dest = “u:/…”  
sources = %w{ c:/movetest/testing c:/ … } # unless you have spaces  
in the pathes  
sources.each do | source |  
Dir.chdir source  
puts source  
FileUtiles.cp\_r Dir.glob(…), dest # if this is what you really want  
end

## HTH Robert

[http://ruby-smalltalk.blogspot.com/](http://ruby-smalltalk.blogspot.com/)

* * *

Whereof one cannot speak, thereof one must be silent.  
Ludwig Wittgenstein

---

<div class="post-metadata">

**Author:** ![owc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/74df32/32.png) [@owc](https://www.ruby-forum.com/u/owc)\
**Post date:** [April 3, 2008, 8:40am UTC](https://www.ruby-forum.com/t/iterators-and-arrays/133659/3 "2008-04-03T08:40:38Z")

</div>

On 02.04.2008 13:17, Robert D. wrote:

> > source=[“C:/movtest/testing”, “C:/movtest”, “U:/movtest”,
> 
> in the pathes  
> sources.each do | source |  
> Dir.chdir source  
> puts source  
> FileUtiles.cp\_r Dir.glob(…), dest # if this is what you really want  
> end

Inside the block I prefer

```
Dir.chdir source do
  puts source
  FileUtiles.cp_r Dir.glob(...), dest
end

```

which will restore the original current directory. That way, you can  
more easily work with relative paths and it might save you from  
surprises when in a completely unrelated location of a larger script  
current dir is no longer the one that it was on program start. 🙂

Kind regards

robert

---

<div class="post-metadata">

**Author:** ![owc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/74df32/32.png) [@owc](https://www.ruby-forum.com/u/owc)\
**Post date:** [April 3, 2008, 9:13am UTC](https://www.ruby-forum.com/t/iterators-and-arrays/133659/4 "2008-04-03T09:13:21Z")

</div>

Robert K. wrote:

> On 02.04.2008 13:17, Robert D. wrote:
> 
> > > source=[“C:/movtest/testing”, “C:/movtest”, “U:/movtest”,
> > 
> > in the pathes  
> > sources.each do | source |  
> > Dir.chdir source  
> > puts source  
> > FileUtiles.cp\_r Dir.glob(…), dest # if this is what you really want  
> > end
> 
> Inside the block I prefer
> 
> ```
> Dir.chdir source do
> puts source
> FileUtiles.cp_r Dir.glob(...), dest
> end
> 
> ```
> 
> which will restore the original current directory. That way, you can  
> more easily work with relative paths and it might save you from  
> surprises when in a completely unrelated location of a larger script  
> current dir is no longer the one that it was on program start. 🙂
> 
> Kind regards
> 
> robert

The code is actually feasible but for a typo mistake!(Cause there wasnt  
a dir named U:\test1) Here’s the edited code:

dest=%w[U:/test\_1 U:/dest1 U:/dest2 U:/dest3 U:/dest4]  
j1=dest.length - 1  
i1= 0  
source=%w[C:/movtest/testing C:/movtest/testing/new U:/movtest/source  
U:/movtest/new U:/movtest/new1]  
j=source.length - 1  
i= 0  
while i\<=j && i1\<=j1

Dir.chdir(source[i])  
print Dir.getwd  
print dest[i1]  
FileUtils.cp\_r Dir.glob(‘2008\*’), dest[i1]  
i+=1  
i1+=1  
end

But is there anyway whereby, I can write all the ‘print’ to a log file  
for reference, just in case there might be an error in copying? And if  
possible have some conditions to test if the files did really copy over?  
Thanks.
