使用mget从sftp下载多个文件

使用mget从sftp下载多个文件

我有一些R代码,一方面,我正在连接到 sftp 并尝试下载一些文件。需要下载的文件由R代码决定,可以只有一个,也可以是多个。我正在尝试使用mget下载文件,但它似乎不起作用:

sftp> mget abc.PDF  def.PDF ghi.PDF
Fetching /abc.PDF to def.PDF

它只是下载 abc.PDF 并将其作为 def.PDF 存储在本地目录中,而不是下载所有三个文件。我在做什么?

答案1

mget使用 glob 作为参数的“源文件”部分(至少在 OpenSSH 版本 7.3 中):

sftp> ls *.pdf
foo.pdf                   bar.pdf                   
sftp> mget *.pdf
Fetching /home/jdoe/bar.pdf to bar.pdf
Fetching /home/jdoe/foo.pdf to foo.pdf
sftp> 

相反,如果 glob get 捕获太多文件,您将需要以某种方式循环遍历文件并逐一获取它们。

答案2

它不起作用,因为 OpenSSHsftp不支持它。它与(事实上,甚至没有记录在联机帮助页中)mget相同,并且仅采用一个远程文件名参数(尽管该参数可以是一个 glob)。getmgethelp

因此,要使用 OpenSSH SFTP 客户端,您需要为get每个文件发出一个。或者,您可以使用不同的 SFTP 客户端(例如,lftp具有mget您想要的功能)。或者(感谢 Gilles 的提醒)您可能会发现使用 sshfs(通过 FUSE)然后使用普通文件复制命令(cp或 R 内置的任何命令)更方便。

相关内容