Forum: Ruby FTP - Multiple file downloads

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
ruby l. (Guest)
on 2009-04-14 12:55
I have written ftp code which will download a single file from the
Server using the below code:

require 'rubygems'
require 'net/ftp'
require 'fileutils'

URL = 'IP address'
username = 'test'
passwd = "test"
filename = "file1"
directory = '/home/test/'
localfile = 'C:\\Documents and Settings\\User1\\Desktop\\file1'
ftp=Net::FTP.new
ftp.connect(URL,21)
ftp.login(username,passwd)
ftp.chdir(directory)
ftp.getbinaryfile(filename,localfile)
ftp.close

But what i am really looking for is:
1) Download multiple files from a given directory.
2) Download files by giving wild characters (eg: *.xls or *.txt)

Please let me know if there is a better way or easier way to achieve
these tasks.

cheers
Mark T. (Guest)
on 2009-04-14 15:45
(Received via mailing list)
On Apr 14, 4:55 am, Idealone I. <removed_email_address@domain.invalid> wrote:
> filename = "file1"
> 1) Download multiple files from a given directory.
> 2) Download files by giving wild characters (eg: *.xls or *.txt)
>
> Please let me know if there is a better way or easier way to achieve
> these tasks.

Not all that familiar with the library, but I do recall there is a
list method that accepts wildcards. Try something like this:

files = ftp.list('*.xls')
files.each do |filename|
  ftp.getbinaryfile(filename, filename)
end

-- Mark
ruby l. (Guest)
on 2009-04-14 17:10
Mark T. wrote:
> On Apr 14, 4:55�am, Idealone I. <removed_email_address@domain.invalid> wrote:
>> filename = "file1"
>> 1) Download multiple files from a given directory.
>> 2) Download files by giving wild characters (eg: *.xls or *.txt)
>>
>> Please let me know if there is a better way or easier way to achieve
>> these tasks.
>
> Not all that familiar with the library, but I do recall there is a
> list method that accepts wildcards. Try something like this:
>
> files = ftp.list('*.xls')
> files.each do |filename|
>   ftp.getbinaryfile(filename, filename)
> end
>
> -- Mark

I tried using the above code, i am getting some error:

NetBeans 6.5/ruby2/jruby-1.1.4/lib/ruby/1.8/net/ftp.rb:494:in `open': Is
a directory - Is a directory (Errno::EISDIR)
        from C:/Program Files/NetBeans
6.5/ruby2/jruby-1.1.4/lib/ruby/1.8/net/ftp.rb:494:in `getbinaryfile'
        from C:\user\workspace\qa\Cvis-ruby\lib\ftp_config.rb:25
        from C:\user\workspace\qa\Cvis-ruby\lib\ftp_config.rb:24:in
`each'
        from C:\user\workspace\qa\Cvis-ruby\lib\ftp_config.rb:24


-- cheers
Mark T. (Guest)
on 2009-04-14 18:15
(Received via mailing list)
What to do when you get an error:
1. Read the error message. It might have a clue as to what the problem
is.
2. Scan the backtrace for method names you may have called.
3. Analyze what situation might have caused the method(s) to throw the
error.
Enrique M. (Guest)
on 2009-04-21 23:15
That's why,

files = ftp.list('*.xls')
p files

Returns an array of file information
Mark T. (Guest)
on 2009-04-21 23:27
(Received via mailing list)
No, The OP was trying to open a directory. This information was right
there in the error message. The next step would be for him to find out
why his listing included directories, and omit them.
This topic is locked and can not be replied to.