2014-03-06 130 views
15

我有一个名为基于R从FTP服务器下载最新文件

FileA2014-03-05-10-24-12 
FileB2014-03-06-10-25-12 

AA号文件的其中一部分“2014-03-05-10-24-12”是指“年/日/月/时/分/秒/”。这些文件驻留在ftp服务器上。我想使用R连接到FTP服务器并根据日期下载最新的任何文件。

我已经开始尝试使用RCurl和dirlistonly列出内容。下一步将尝试解析并找到最新的文件。还没有应用...

library(RCurl) 
getURL("ftpserver/",verbose=TRUE,dirlistonly = TRUE) 
+0

我没有一个FTP服务器来测试它,但是你可以使用list.files来获取所有的文件名,然后解析它以获得最新的? –

+0

谢谢你的建议。这应该工作。然而,对于R来说,我很新,我不知道我会怎么做。 – Alexander

+0

[递归ftp下载,然后提取gz文件]的可能重复(http://stackoverflow.com/questions/5227444/recursively-ftp-download-then-extract-gz-files) – sds

回答

20

这应该工作

library(RCurl) 
url <- "ftp://yourServer" 
userpwd <- "yourUser:yourPass" 
filenames <- getURL(url, userpwd = userpwd, 
      ftp.use.epsv = FALSE,dirlistonly = TRUE) 

-

times<-lapply(strsplit(filenames,"[-.]"),function(x){ 
    time<-paste(c(substr(x[1], nchar(x[1])-3, nchar(x[1])),x[2:6]), 
     collapse="-") 
    time<-as.POSIXct(time, "%Y-%m-%d-%H-%M-%S", tz="GMT") 
}) 
ind <- which.max(times) 
dat <- try(getURL(paste(url,filenames[ind],sep=""), userpwd = userpwd)) 

所以dat现在包含最新的文件

为了让reproduceable:所有其他人可以使用这个,而不是上部使用

filenames<-c("FileA2014-03-05-10-24-12.csv","FileB2014-03-06-10-25-12.csv") 
相关问题