从 FTP 服务器检索文件的修改日期时间

标签 r ftp rcurl last-modified

有没有办法在 R 中查找 FTP 服务器上文件的修改日期/时间?我找到了一种列出所有可用文件的好方法,但我只想下载自上次检查以来已更新的文件。我尝试使用:

info<-file.info(url)

但是,它返回一个非常丑陋的列表,什么也没有。我的网址由以下部分组成: “ftp://username:password@FTPServer//filepath.xml

最佳答案

在我们看到这个特定 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 目录列表响应。只需更改您的正则表达式即可。

关于从 FTP 服务器检索文件的修改日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32488644/

相关文章:

go - 使用go从ftp服务器解压部分gz文件

java - 如何获取FTP服务器的文件分隔符

c - 使用read和write做服务器和客户端(FTP协议(protocol))

带有 getURL 和 RCurl 错误的 R API 连接(Localytics)

r - 登录网站以使用 RCurl 获取数据

r - 如何使用 ggplot2 为曲线下的区域着色

r - 采样 - 限制每个元素被使用的次数

r - 重叠嵌套列表并保留命名/结构

r - 使用 R 从带有登录凭据的 https 下载文件

r - 如何用尚未计算的抽象引用数据写一篇文章?