R从Ubuntu中的ftp服务器下载文件
每个人 我正在使用Ubuntu 14.04在谷歌云虚拟机上运行RStudio服务器(请参阅最后的completeR从Ubuntu中的ftp服务器下载文件,r,ubuntu,ftp,google-cloud-platform,rstudio-server,R,Ubuntu,Ftp,Google Cloud Platform,Rstudio Server,每个人 我正在使用Ubuntu 14.04在谷歌云虚拟机上运行RStudio服务器(请参阅最后的completesessionInfo)。我正在尝试从ftp服务器下载一些文件,第一步是列出服务器中的子目录,我使用的是RCurl包: library(RCurl) getFiles <- function(dirs) { urls <- paste(dirs, "/", sep="") fls <- strsplit(getURL(urls, dirlistonly=TRUE),
sessionInfo
)。我正在尝试从ftp服务器下载一些文件,第一步是列出服务器中的子目录,我使用的是RCurl
包:
library(RCurl)
getFiles <- function(dirs) {
urls <- paste(dirs, "/", sep="")
fls <- strsplit(getURL(urls, dirlistonly=TRUE), "\r?\n")
ok <- sapply(fls, length) > 0
unlist(mapply(paste, urls[ok], fls[ok], sep="", SIMPLIFY=FALSE),
use.names=FALSE)
}
dirs <- "ftp://ftp.mtps.gov.br/pdet/microdados/RAIS"
folders <- getFiles(dirs)
我在我的Windows机器上本地运行了相同的代码,运行得非常完美
显然,由于涉及Linux的某些原因,VM无法与ftp服务器建立连接(我做了一些研究,有些人使用getBinaryURL
而不是getURL
,但我还没有弄清楚如何将其应用到我的代码中……),有人能给我点提示吗
下面是虚拟机中详细的sessionInfo
:
R version 3.3.0 beta (2016-03-30 r70404)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.4 LTS
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8
[4] LC_COLLATE=en_US.UTF-8 LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C LC_ADDRESS=C
[10] LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
您是否检查过是否需要使用pasv ftp而不是“活动”?您好,@MarcB。对不起,你能再澄清一点吗?我没有太多处理Linux机器的经验…这是一个ftp协议的东西。标准ftp有用于发送命令的客户端->服务器连接,但接收数据服务器->客户端需要服务器连接到客户端,这在很多情况下是不可能的,因此有“PASV”ftp,它只有客户端->服务器连接。@MarcB,我试图使用命令
quote PASV
检查连接是否为被动连接,但该命令不会返回任何信息,因为连接甚至还没有建立……如果你在谷歌云中运行,赞助商是谁并不重要。非智能阻止列表是非智能阻止列表。是否检查是否需要使用pasv ftp而不是“活动”?您好,@MarcB。对不起,你能再澄清一点吗?我没有太多处理Linux机器的经验…这是一个ftp协议的东西。标准ftp有用于发送命令的客户端->服务器连接,但接收数据服务器->客户端需要服务器连接到客户端,这在很多情况下是不可能的,因此有“PASV”ftp,它只有客户端->服务器连接。@MarcB,我试图使用命令quote PASV
检查连接是否为被动连接,但该命令不会返回任何信息,因为连接甚至还没有建立……如果你在谷歌云中运行,赞助商是谁并不重要。非智能块列表是非智能块列表。
R version 3.3.0 beta (2016-03-30 r70404)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.4 LTS
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8
[4] LC_COLLATE=en_US.UTF-8 LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C LC_ADDRESS=C
[10] LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C