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.
16f82f5caa12038965397b3fd6ca3bec?d=identicon&s=25 ruby learner (idealone)
on 2009-04-14 10: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
134ea397777886d6f0aa992672a50eaa?d=identicon&s=25 Mark Thomas (Guest)
on 2009-04-14 13:45
(Received via mailing list)
On Apr 14, 4:55 am, Idealone Ideally <sheka...@gmail.com> 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
16f82f5caa12038965397b3fd6ca3bec?d=identicon&s=25 ruby learner (idealone)
on 2009-04-14 15:10
Mark Thomas wrote:
> On Apr 14, 4:55�am, Idealone Ideally <sheka...@gmail.com> 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
134ea397777886d6f0aa992672a50eaa?d=identicon&s=25 Mark Thomas (Guest)
on 2009-04-14 16: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.
4aefcff699d66ccc8134b5d4b0008186?d=identicon&s=25 Enrique Meza (emezac)
on 2009-04-21 21:15
That's why,

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

Returns an array of file information
134ea397777886d6f0aa992672a50eaa?d=identicon&s=25 Mark Thomas (Guest)
on 2009-04-21 21: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.