使用R从FTP下载文件

10

我正试图从这个FTP获取文件。

ftp://ftp.pride.ebi.ac.uk/pride/data/archive/2015/11/PXD000299/

我只需要以.dat扩展名开头的文件。但是有其他我不感兴趣的文件。

我想避免逐个下载每个文件,所以我想创建一个包含名称的向量,并循环执行它们。

如何只下载我想要的文件?

谢谢

编辑: 我尝试了以下方法:

downloadURL <- "ftp://ftp.pride.ebi.ac.uk/pride/data/archive/2015/11/PXD000299/F010439.dat"
download.file(downloadURL, "F010439.dat") #this is a trial using one file

几秒钟后,我收到以下错误:

trying URL 

    'ftp://ftp.pride.ebi.ac.uk/pride/data/archive/2015/11/PXD000299/F010439.dat'
    Error in download.file(downloadURL, "F010439.dat") : 
      cannot open URL 'ftp://ftp.pride.ebi.ac.uk/pride/data/archive/2015/11/PXD000299/F010439.dat'
    In addition: Warning message:
    In download.file(downloadURL, "F010439.dat") :
      InternetOpenUrl failed: 'Die FTP-Sitzung wurde beendet.

'
1个回答

16
使用curl库提取目录列表。
> library(curl)
> url = "ftp://ftp.pride.ebi.ac.uk/pride/data/archive/2015/11/PXD000299/"
> h = new_handle(dirlistonly=TRUE)
> con = curl(url, "r", h)
> tbl = read.table(con, stringsAsFactors=TRUE, fill=TRUE)
> close(con)
> head(tbl)
                                                 V1
1  12-0210_Druart_Uterus_J0N-Co_1a_ORBI856.raw.mzML
2  12-0210_Druart_Uterus_J0N-Co_2a_ORBI857.raw.mzML
3  12-0210_Druart_Uterus_J0N-Co_3a_ORBI858.raw.mzML
4 12-0210_Druart_Uterus_J10N-Co_1a_ORBI859.raw.mzML
5 12-0210_Druart_Uterus_J10N-Co_2a_ORBI860.raw.mzML
6 12-0210_Druart_Uterus_J10N-Co_3a_ORBI861.raw.mzML

将相关内容粘贴到网址上并使用。

urls <- paste0(url, tbl[1:5,1])
fls = basename(urls)
curl_fetch_disk(urls[1], fls[1])

2
除了这个已经很好的答案,你还可以使用 curl::curl_download() 函数来保存文件。 - Rich Pauloo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接