題 如何在sftp中獲取整個目錄?


我只是學習使用sftp,我想將目錄從遠程計算機複製到本地計算機。如果我試試

get [directory]

它給了我這個錯誤:

Cannot download non-regular file: /home/mpirocch/Documents

get -R 也行不通。


168
2017-09-12 21:39


起源


遞歸put / get被添加到OpenSSH中,該版本於2010年發布。您可以考慮升級服務器,因為它還增加了許多錯誤修復和更好的安全功能。 - Lèse majesté


答案:


使用 -r (遞歸)標誌:

get -r *

239
2017-11-29 21:38



感謝您提供實際回答問題的答案。 - jonnyflash
給我: get: Invalid flag -r - ghbarratt
這也給了我無效的標誌。我不確定所有系統都支持此功能。 - Ben
@Ben:當我在2009年問這個問題的時候 -r 國旗不存在。你的系統是最新的嗎? - Matthew
@silvinci沒有 所有 現行製度。 CentOS 6.4 openssh-clients-5.3p1-84.1.el6.x86_64的非法選項 - CrackerJack9


使用:

scp -r mpirocch@my-server:/home/mpirocch/Documents Documents

51
2017-09-12 21:51



這是有效的,但能夠從SFTP執行此操作會很好(因此我可以在復制之前看到我複制的內容)。這可能嗎? - Matthew
@Matthew:我不這麼認為。一段時間以來,我一直在問自己同樣的問題,目前我得到的最佳答案是 scp -r。或者您可以使用像Filezilla這樣的高級SFTP客戶端。 - Cristian Ciupitu
scp -r將遵循符號鏈接... - jsleuth
有些系統可能允許 sftp, 但不是 scp 訪問。 - Turion


使用 lftp

lftp sftp://user@host

然後,在lftp內, cd 進入要復制的目錄 並使用 mirror 命令以遞歸方式下載所選目錄, 像這樣:

mirror

此命令接受選項和參數:

鏡子 [OPTIONS] [[資源 [目標]]

例如, -R (要么 --reverse) 選項 將導致它將本地目錄樹上載到遠程目錄:

mirror -R

lftp(1) 手冊頁 在項目的網站上 要么 在Debian.org 其他命令和選項。


38
2018-04-08 13:54



+1 lftp就像一小堆魔法和歡樂! - WCWedin


如果能找到更好的東西,請不要直接使用sftp程序。對於Linux,許多文件管理器(至少Nautilus和Dolphin,GNOME和KDE)本身支持sftp,並且總是有sshfs。對於Windows,可能有WinSCP 其他。所有這些的要點是讓你通過sftp訪問文件,就像它們在常規文件系統上一樣,所以你不必關心你是通過sftp訪問它們的。


15
2017-09-13 03:11



哇,nautilus與SFTP的合作非常好。我在Nautilus中添加了一個書籤,現在它簡直太容易了。謝謝! - Matthew
我遇到了Nautilus SFTP的性能問題。是的,這真的很方便但是我無法通過Nautilus使1 Gbit / s網絡飽和 sftp/ssh 命令行界面我是(cca 100 MB / s文件傳輸)。所以問題是Nautilus在GNU / Linux Mint上。 - stamster


以及這個小指南應該有幫助,使用lftp將遠程服務器鏡像到本地文件夾

lftp sftp://user:password@server.org:22 -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'

  • sftp:// =使用SFTP協議
  • mirror =鏡像模式
  • verbose =顯示正在下載的文件
  • use-pget-n =段數,對於加速大文件非常有用
  • parallel =同時下載乘數文件

如果你想並行下載文件切換出來 use-pget-n=8 同 --parallel=8 

希望這可以幫助任何需要將遠程文件夾鏡像到本地文件夾的人


13
2018-03-10 01:18



謝謝,這對我有用,在其他方法失敗後(特別是在sftp上沒有“-r”選項)。由於密碼中的美元字符,因此需要引用我的情況下命令的第一部分 lftp 'sftp://user:pa$$word@server.org:22' -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path' - Jason


嘗試 mget 代替 get

澄清: mget   如果你在要復制的目錄中工作;如果你做這樣的事情:

sftp> cd dir_to_get
sftp> mget *

它將獲取該目錄中的所有文件。但是,它不會遞歸獲取任何子目錄的內容。


12
2017-09-12 22:34



mget對我來說沒有任何好處。 - Matthew
獲取無法下載非常規文件 - Dchris
這對我來說在'get -r'不起作用的系統上起作用。 - Tchotchke


get -r [directory]

得到 [directory] 以及它下面的一切,在哪裡 r 代表遞歸。我只是通過打字找到了這個 help 從 sftp


9
2018-03-06 16:56



IMO這是這個問題的最佳答案。 :) - ramrunner
這是一個副本 回答 從 2010年11月29日 (差不多一年半前)。 - Cristian Ciupitu


和。一樣 cp

scp -rp user@host:/path/to/dir dir

以上將保留原始文件和子目錄的時間和模式。這對於備份檢索特別有用。


4
2018-01-11 09:50



這基本上是一個副本 回答 從 2010年11月29日 (差不多兩年前)。 - Cristian Ciupitu


我在遠程服務器中有Java dist文件夾,我有以下樹:

- dist
--- Audio.jar
--- README
--- lib
----- lib.jar

目標是:我想使用SFTP?並將它們放在/ tmp / <>中

步驟1. sftp remoteuser @ ip

步驟2. cd / var / tmp

第2步.lmkdir / tmp / dist; lmkdir / tmp / dist / lib

第3步.lcd / tmp / dist

第4步.mget *

步驟5. lcd / tmp / dist / lib

第6步.mget *

第7步。最後我有我的目標

$ ls
Audio.jar  lib  README.TXT

0
2017-09-28 08:39