Sftp

使用 mget 從 sftp 下載多個文件

  • December 9, 2016

我有一些R程式碼,在某一部分,我正在連接到一個 sftp 並嘗試下載一些文件。需要下載的文件由R程式碼決定,可以只有一個,也可以是多個。我正在嘗試使用mget來下載文件,但它似乎不起作用:

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

它只是下載 abc.PDF 並將其作為 def.PDF 儲存在本地目錄中,而不是下載所有三個文件。我在做什麼?

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 擷取太多,您將需要以某種方式循環文件並一個接一個地獲取它們。

它不起作用,因為 OpenSSHsftp不支持它。它mgetget(實際上,mget甚至沒有記錄在help手冊頁中)相同,並且只接受一個遠端文件名參數(儘管該參數可以是一個 glob)。

因此,要使用 OpenSSH SFTP 客戶端,您需要為get每個文件發出一個。或者,您可以使用不同的 SFTP 客戶端(例如,lftp具有mget您想要的工作方式)。或者(感謝 Gilles 的提醒)您可能會發現使用 sshfs(通過 FUSE)然後使用普通文件複製命令(cp或任何 R 內置)更方便。

引用自:https://unix.stackexchange.com/questions/329058