Начнем с простого... для того, чтобы получить файл (с заранее известным адресом) можно использовать тот же open-uri.
| Код | require 'open-uri' url = 'ftp://localhost/test.txt'
open(url).read.display( File.open(File.basename(url),'w+') )
|
Но это только на чтение и для заранее определенных имен файлов. Поэтому нужно работать со специализированной библиотекой net/ftp.
| Код | require 'net/ftp' require 'pp'
Net::FTP.open('localhost'){ |ftp| ftp.login files = ftp.list('*').find_all{ |str| str[/^-/] }.map{ |str| str.split(/\s+/).last } pp files dirs = ftp.list('*').find_all{ |str| str[/^d/] }.map{ |str| str.split(/\s+/).last } pp dirs }
|
Можно переходить в директории методом .chdir, но лучше использовать .list с указанием директории.
| Код | ftp.list('2000.12.12/*')
|
Стандартных регулярок здесь нет, но в примере я использовал несколько... для распознавания файл/директория и разбиения. Ты тоже можешь так делать. Регулярное выражение для твоих директорий будет выглядеть примерно так:
| Код | dirs = ftp.list('*').find_all{ |str| [/\d{4}\.\d{2}\.\d{2}$/,/^d/].all?{ |rule| str[rule] } }.map{ |str| str.split(/\s+/).last } pp dirs
|
С файлами проще... сворее всего их можно отсекать по расширению:
| Код | files = ftp.list('2000.12.12/*.hdf').find_all{ |str| str[/^-/] }.map{ |str| str.split(/\s+/).last } pp files
|
Метод pp я использовал для отладки. Можешь выкинуть все pp и reqiure 'pp' после того, как все заработает. |