首先,我知道这不是一个具体的代码问题,所以请随意投票关闭这个问题,但我今天大部分时间都在努力解决这个问题,需要一些帮助。我认为这个帖子也可以帮助任何试图在R中使用sftp协议的人,因为我会分享我今天所做的。
我一直在尝试更新RCurl,使其支持sftp协议。在R中,我的协议如下(版本和主机也包括在内):
> library(RCurl)
> curlVersion()$protocols
[1] "dict" "file" "ftp" "ftps" "gopher" "http" "https" "imap" "imaps" "ldap" "ldaps" "pop3" "pop3s" "rtsp" "smb" "smbs"
[17] "smtp" "smtps" "telnet" "tftp"
> curlVersion()$version
[1] "7.43.0"
> curlVersion()$host
[1] "x86_64-apple-darwin15.0"
不太好——没有sftp选项...
我按照这个帖子的步骤-http://andrewberls.com/blog/post/adding-sftp-support-to-curl-更新了我的机器上的curl,部分成功。成功的部分体现在我在命令行中运行以下命令时:
curl -V
curl 7.55.1 (x86_64-apple-darwin15.6.0) libcurl/7.55.1 zlib/1.2.5
libssh2/1.8.0
Release-Date: 2017-08-14
Protocols: dict file ftp gopher http imap ldap ldaps pop3 rtsp scp sftp smtp telnet tftp
Features: AsynchDNS IPv6 Largefile libz UnixSockets
这很棒,因为我已经更新了curl。然而,在载入RCurl并在R中运行curlVersion()时,它没有更新。我检查了我的/usr/目录下的lib文件夹,并遇到以下问题。在我的/usr/lib和/usr/local/lib两个目录中都存在libcurl文件。具体而言:
- /usr/lib中有libcurl.3.dylib、libcurl.4.dylib和libcurl.dylib
- /usr/local/lib中有libcurl.4.dylib、libcurl.dylib、libcurl.a和libcurl.la
我想使用/usr/local/lib目录中的新文件,但这就是我头疼的地方。我将四个文件从/usr/local/lib复制到了/usr/lib,结果导致我的电脑崩溃。许多应用程序无法加载,因此我不得不重新安装我的OS X,以免出现其他任何问题。重新安装后,我的文件被放回到它们各自的文件夹中(如上面所述)。
如果我要猜测,我可能不该移动.a或.la文件……我不确定。
最后一件事——当我在控制台中运行$ $PATH时,我得到:
$PATH
-bash: /Users/Home/.rvm/gems/ruby-2.3.3/bin:/Users/Home/.rvm/gems/ruby-2.3.3@global/bin:/Users/Home/.rvm/rubies/ruby-2.3.3/bin:/Users/Home/anaconda2/bin:/usr/local/git/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/TeX/texbin:/Users/Home/.rvm/bin: No such file or directory
/usr/local/bin在/usr/bin之前。但是我没有看到任何与/usr/local/lib或/usr/lib有关的内容 - 我可以将这些(/usr/local/lib)添加到我的路径中以解决这个问题吗?在R中,libPaths()给出了这个结果:
.libPaths()
"/Library/Frameworks/R.framework/Versions/3.4/Resources/library"
如果有帮助的话
编辑 - 我应该指出,所有问题的根源当然是因为在R中curlVersion()$protocols中没有列出'sftp',所以当我运行RCurl::getURL()或RCurl::ftpUpload()(我希望使用ftpUpload)时,对于两者都会收到错误:
> RCurl::ftpUpload(what = 'myfile.txt', to = 'sftp://userid:userpw@ip/'myfile.txt')
Error in function (type, msg, asError = TRUE) :
Protocol "sftp" not supported or disabled in libcurl
感谢您!
autoconf
,但是你的解决方案对我很有帮助,谢谢! - Benoît Fayolle