Iterators and arrays

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

On Wed, Apr 2, 2008 at 11:53 AM, Clement Ow
[email protected] wrote:

j=source.length - 1

Posted via 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/


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

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. :slight_smile:

Kind regards

robert

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. :slight_smile:

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.