2015-09-09 2 views
2

Есть ли способ найти измененную дату/время для файлов на FTP-сервере в R? Я нашел отличный способ перечислить все файлы, которые доступны, но я хочу только загрузить те, которые были обновлены с момента последней проверки. Я попытался использовать:Извлечение измененного DateTime файла с FTP-сервера

info<-file.info(url) 

Однако он возвращает довольно уродливый список ничто. Мой URL состоит из: «ftp://username:[email protected]//filepath.xml»

+0

это помогло бы, если бы вы могли хотя бы показать вывод каталога – hrbrmstr

ответ

4

Пока мы не видим выход из этого конкретного FTP-сервера (все они разные) для списков каталогов, вот путь, который вы можете следовать:

library(curl) 
library(stringr) 

Получить необработанный список каталогов:

con <- curl("ftp://ftp.FreeBSD.org/pub/FreeBSD/") 
dat <- readLines(con) 
close(con) 
dat 

## [1] "-rw-rw-r-- 1 ftp  ftp   4259 May 07 16:18 README.TXT" 
## [2] "-rw-rw-r-- 1 ftp  ftp   35 Sep 09 21:00 TIMESTAMP" 
## [3] "drwxrwxr-x 9 ftp  ftp   11 Sep 09 21:00 development" 
## [4] "-rw-r--r-- 1 ftp  ftp   2566 Sep 09 10:00 dir.sizes" 
## [5] "drwxrwxr-x 28 ftp  ftp   52 Aug 23 10:44 doc"   
## [6] "drwxrwxr-x 5 ftp  ftp    5 Aug 05 04:16 ports"  
## [7] "drwxrwxr-x 10 ftp  ftp   12 Sep 09 21:00 releases" 

Фильтр из каталогов:

no_dirs <- grep("^d", dat, value=TRUE, invert=TRUE) 
no_dirs 

## [1] "-rw-rw-r-- 1 ftp  ftp   4259 May 07 16:18 README.TXT" 
## [2] "-rw-rw-r-- 1 ftp  ftp   35 Sep 09 21:00 TIMESTAMP" 
## [3] "-rw-r--r-- 1 ftp  ftp   2566 Sep 09 10:00 dir.sizes" 

Извлечение только временной метки и имя файла:

date_and_name <- sub("^[[:alnum:][:punct:][:blank:]]{43}", "", no_dirs) 
date_ane_name 
## [1] "May 07 16:18 README.TXT" 
## [2] "Sep 09 21:00 TIMESTAMP" 
## [3] "Sep 09 10:00 dir.sizes" 

Поместите их в data.frame:

do.call(rbind.data.frame, 
     lapply(str_match_all(date_and_name, "([[:alnum:] :]{12}) (.*)$"), 
       function(x) { 
       data.frame(timestamp=x[2], 
          filename=x[3], 
          stringsAsFactors=FALSE) 
})) -> dat 
dat 

##  timestamp filename 
## 1 May 07 16:18 README.TXT 
## 2 Sep 09 21:00 TIMESTAMP 
## 3 Sep 09 10:00 dir.sizes 

Вам все еще нужно, чтобы преобразовать метку в POSIXct, но это тривиально.

Этот конкретный пример зависит от ответа на список каталогов FTP в этой системе. Просто измените регулярные выражения для своих.

+1

СПАСИБО ОЧЕНЬ МНОГО. Кажется, это работает отлично. – user3267547

+0

рад, что это сработало. галочку в ответном поле будет приветствоваться. – hrbrmstr

+1

в случае, если это поможет кому угодно, если ваш ftp использует пароли: con <- curl ("user: pwd @ ftp: //ftp.FreeBSD.org/pub/FreeBSD/") – andrewm4894

Смежные вопросы