我只是在学习使用sftp,我想将目录从远程计算机复制到我的本地计算机。如果我尝试

get [directory]


,则会出现此错误:

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


get -R不起作用,或者。

评论

递归放置/获取功能已在2010年发布的5.4中添加到OpenSSH中。您可以考虑升级服务器,因为它还添加了许多错误修复和更好的安全性功能。

哇,sftp基本上是没有用的。 lftp很有帮助。

#1 楼

使用-r(递归)标志:

get -r *


评论


感谢您提出一个可以真正回答问题的答案。

– aVeRTRAC
2012年1月19日19:56

给我:get:无效标志-r

–ghbarratt
2012年7月18日在21:21



这也给了我无效的标志。我不确定所有系统都支持此功能。

–本
2012年8月28日在7:35

@silvinci并非当前所有系统。 CentOS 6.4中的非法选项openssh-clients-5.3p1-84.1.el6.x86_64

– CrackerJack9
13年5月5日在1:25

由于某些原因,递归上载不能与put -r *一起使用,它无法创建目录。但是对我来说,下面的lftp解决方案很好用。

–中国
2014年12月22日上午8:24

#2 楼

用途:

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


评论


这可以工作,但是能够通过SFTP做到这一点非常好(这样我可以在复制之前看到复制的内容)。这可能吗?

–马修
09年9月12日在22:53

@马修:我不这么认为。一段时间以来,我一直在问自己同样的问题,而目前最好的答案是scp -r。或者,您可以使用Filezilla之类的高级SFTP客户端。

–克里斯蒂安·丘皮图
09年9月12日在23:53

scp -r将遵循符号链接...

–jsleuth
13年2月13日在15:57

某些系统可能允许sftp,但不允许scp访问。

–转向
17年8月4日在9:41

这不能回答问题。

–埃里克·杜米尼尔(Eric Duminil)
19年10月10日在14:20

#3 楼

使用lftp

lftp sftp://user@host


,然后在lftp中,将cd插入要复制的目录,
并使用mirror命令递归下载所选目录,像这样的


mirror


此命令接受选项和参数:

mirror [OPTIONS] [source [target]]


例如,则-R(或--reverse)选项
将使它将本地目录树上载到远程目录:

mirror -R


请参阅以下网址的lftp(1)手册页:项目的站点
或Debian.org上的其他命令和选项。

评论


+1 lftp就像是一堆魔术和欢乐!

–WCWedin
2011-4-27 13:32

#4 楼

这个小指南应该会有所帮助,将远程服务器镜像到具有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

希望这可以帮助需要镜像远程文件夹的任何人到本地文件夹

评论


谢谢,这对我有用,在其他方法失败之后(特别是sftp上没有“ -r”选项)。由于密码lftp'sftp:// user:pa$$word@server.org:22'-e'mirror --verbose --use中的美元字符,本例中命令的第一部分需要加引号-pget-n = 8 -c /远程/路径/本地/路径'

–詹森
2014年11月9日22:57

太好了,谢谢。我想从本地复制到服务器,所以我使用了镜像-R ...

–埃里克·杜米尼尔(Eric Duminil)
19/12/10在14:29

#5 楼

如果可以找到更好的东西,请不要直接使用sftp程序。对于Linux,许多文件管理器(至少是Nautilus和Dolphin,GNOME和KDE的文件管理器)本身都支持sftp,并且总是有sshfs。对于Windows,有WinSCP,可能还有其他。所有这些的目的是让您像使用常规文件系统一样通过sftp访问文件,因此您不必担心通过sftp访问它们。

评论


哇,鹦鹉螺与SFTP搭配使用效果很好。我在Nautilus中添加了一个书签,现在这一切都非常简单。谢谢!

–马修
09-09-13 14:13

我在Nautilus SFTP上遇到性能问题。是的,这确实很方便,但是我无法通过Nautilus饱和1 Gbit / s的网络,而使用普通的sftp / ssh命令行界面则是(cca 100 MB / s的文件传输)。因此,问题出在GNU / Linux Mint上的Nautilus。

– stamster
18年1月25日在22:15

#6 楼

请尝试使用mget代替get

说明:如果您要复制的目录位于内部,则mget可以工作;如果您执行以下操作:

sftp> cd dir_to_get
sftp> mget *


,它将获取该目录中的所有文件。但是,它不会递归获取任何子目录的内容。

评论


mget的工作比为我服务更好。

–马修
09年9月12日在22:53

无法与此一起下载非常规文件

– Dchris
15年8月24日在9:04

这对我在'get -r'无效的系统上起作用。

– Tchotchke
16-09-20在19:47

#7 楼

get -r [directory]


得到[directory]及其下的所有内容,其中r表示递归。我只是通过从help键入sftp来发现的。

评论


海事组织,这是对这个问题的最佳答案。 :)

– ramrunner
13年1月24日在18:28

这是10年11月29日(将近一年半之前)的答案的重复。

–克里斯蒂安·丘皮图
2014年1月4日19:43



#8 楼

cp一样:

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


以上内容将保留原始文件和子目录的时间和方式。这对于检索备份特别有用。

评论


这基本上是10年11月29日(差不多两年前)的答案的重复。

–克里斯蒂安·丘皮图
2014年1月4日19:47



如果仅允许sftp,则这尤其无用。

–埃里克·杜米尼尔(Eric Duminil)
19/12/10下午14:19

#9 楼

我在远程服务器上有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