我正在尝试使用命令行ftp客户端通过ftp文件夹,但是到目前为止,我只能使用'get'来获取单个文件。

评论

正确的答案是来自lkuty的11年4月6日14:13。不要使用mget,它根本不是递归的。来自08年9月22日9:01的答案蒂博·巴雷尔(ThibautBarrère)更容易理解,但必须添加注释中提到的选项-l 0

#1 楼

您可以依靠通常可以正确处理ftp的wget(至少以我自己的经验)。例如:

wget -r ftp://user:pass@server.com/


还可以使用适合镜像的-m。当前它等效于-r -N -l inf。如果凭据详细信息中包含一些特殊字符,则可以指定--user--password参数以使其起作用。具有特定字符的自定义登录的示例:

wget -r --user="user@login" --password="Pa$$wo|^D" ftp://server.com/


EDIT
@asmaier指出,请注意,即使-r用于递归,它也具有默认最大级别5:


       -r
       --recursive
           Turn on recursive retrieving.

       -l depth
       --level=depth
           Specify recursion maximum depth level depth.  The default maximum depth is 5.



如果不想丢失子目录,最好使用镜像选项-m


       -m
       --mirror
           Turn on options suitable for mirroring.  This option turns on recursion and time-stamping, sets infinite
           recursion depth and keeps FTP directory listings.  It is currently equivalent to -r -N -l inf
           --no-remove-listing.



评论


最好使用wget -m(--mirror)。默认情况下,wget -r的递归深度限制为5。

– asmaier
2011年7月7日在19:28

我还必须在Red Hat上使用--user和--password。我的wget是:修改了GNU Wget 1.11.4 Red Hat我不知道这是版本还是发行版...

– devin
2012年1月17日在20:18



您可以使用-l 0设置无限递归级别,因此无需使用--mirror,这可能会产生一些有害的副作用,例如.listing文件。

–赫纳特
2012年8月8日21:52

我使用wget --ask-password -rl 99 ftp://user@server.com。这样,密码在ps中不可见,并且不会保留在历史记录中。当然,根据ftp的性质,它是不加密地发送到服务器的。

–沃尔特·特罗斯(Walter Tross)
13-10-25在22:25

提醒bash newbs:如果用户名或密码具有控制字符(例如$),则必须使用单引号,例如--user ='用户'--password ='pa $$ word'

– tobek
2015年9月15日在0:48



#2 楼

只是为了补充ThibautBarrère给出的答案。

我使用了

wget -r -nH --cut-dirs=5 -nc ftp://user:pass@server//absolute/path/to/directory


请注意服务器名称后的双斜杠。如果不加斜杠,则路径相对于用户的主目录。



-nH避免创建以服务器名称命名的目录

-nc避免创建新文件(如果目标上已经存在该文件(只是被跳过))

--cut-dirs=5允许获取/ absolute / path / to / directory和to的内容将其放在启动wget的目录中。数字5用于过滤路径的5个组成部分。双斜杠表示多余的组成部分。


评论


辉煌。跳过已经存在的文件的功能非常适合赶上服务器迁移中的最新添加。 rsync效率更高,更灵活,但是有时该选项不可用,并且只能使用FTP。

–詹森
2012年10月23日19:50

这里的参数很好,特别是-nc和--cut-dirs。感谢分享!

–兰斯·克利夫兰
13-10-24在22:50

我并不总是信任“跳过现有文件”,因为其中一个可能不完整或大小和内容不同,但是很好,他提到了该选项

–丹尼尔·W。
13年11月14日在8:48

即使在今天,当无法使用rsync时,我仍然使用此wget命令。 -nc和--cut-dirs非常有用!

– Rob W
15年1月27日在19:11

太棒了!而且,如果您不想在命令行上输入密码,则可以使用--ftp-user = USER和--ask-password。

–shoover
2015年6月5日在23:03

#3 楼

ncftp -u <user> -p <pass> <server>
ncftp> mget directory


评论


我无法使用参数登录到FTP服务器,但是在启动ncftp之后使用以下结构打开ftp:// USERNAME:PASSWORD @ HOST…

–feeela
2011年10月7日10:22

+1-我知道这则帖子很旧,但是我刚发现它,并且ncftp真正易于使用。我使用-R进行ncftpget的递归获取

– Zack Macomber
2012年2月20日在22:57

绝对比wget更可靠,在TAR模式下也更快。谢谢!

– lencinhaus
13年11月22日在11:04

如Ubuntu 14.04所述,这不起作用。对我有用的语法是“ get -R directory”而不是mget。

–伊凡
2014年9月3日下午16:39

在Ubuntu 14.04上为我工作。我不必担心这一切都在那里。

– Ashley
2015年12月8日在11:24



#4 楼

如果您的计算机上安装了lftp,请使用mirror dir。您完成了。如果您要递归下载目录,请参见下面Ciro的评论。

评论


也可以使用mirror ./递归下载当前路径中的所有文件和文件夹。

– Nabi K.A.Z.
2014年7月9日下午0:38

您也可以只为当前目录及其子文件夹键入mirror。

–迈克尔
16年5月23日在11:52



我用过:$ mkdir -p〜/ example.com / dir $ lftp -u用户,密码ftp.example.com lftp>设置ssl:verify-certificate no lftp>镜像目录〜/ example.com / dir

– jrosell
20 Jul 23'9:06



#5 楼

如果可以使用scp代替ftp,则-r选项将为您完成此操作。我将检查是否可以使用比FTP更现代的文件传输机制。

评论


我之所以投票赞成这是因为这确实是我的第一个想法,即使它不能严格按照原样回答问题。

–metao
08-09-22在9:04

您建议@ greg-hewgill哪一个?我有类似的问题

–米歇尔·冈达(Michal Gonda)
16年8月25日在11:25

scp仍将尝试使用ssh,如果您只有FTP凭据,它将无法使用。在回应2008年的评论时感到很奇怪,他说我坚持使用的技术不是现代技术:(很好的2008年,您发表评论的那天我已经18岁了。

– aexl
17年6月17日19:34



#6 楼

改用WGet。它支持HTTP和FTP协议。

wget -r ftp://mydomain.com/mystuff


祝你好运!

参考:http://linux.about.com/od/commands /l/blcmdl1_wget.htm

评论


这是最简单的解决方案,对我而言就足够了。感谢您的分享。

– Honza P.
20 Jul 27 '13:11

#7 楼

有“ ncftp”可用于在Linux中安装。这适用于FTP协议,可用于递归下载文件和文件夹。在linux上工作。已使用递归文件夹/文件传输,并且工作正常。

检查此链接... http://www.ncftp.com/

评论


ncftp在Windows上也可以工作

–伊利亚
08/09/22在9:14

我爱ncftp!谢谢。

– jocull
2012年10月26日19:39

#8 楼

如果可以的话,我强烈建议您tarbzip(或gzip,无论您的船什么都漂浮)在远程机器上的目录-对于任何大小的目录,节省带宽可能值得花时间压缩/解压缩。 br />

评论


也许是在2008年,但是在2013年,带宽不再重要,您可能拥有FTP但没有控制台访问权限:-)

–丹尼尔·W。
13年11月14日在8:49

#9 楼

如果要坚持使用命令行FTP,则应尝试使用NcFTP。然后,您可以使用get -R递归获取文件夹。您还将获得完成。

#10 楼

wget -r ftp://url

非常适合Redhat和Ubuntu

#11 楼

您不应使用ftp。与telnet一样,它也不使用安全协议,并且密码以明文形式传输。这使第三方很容易捕获您的用户名和密码。

要远程复制远程目录,这些选项更好:


rsync是最好的是适合的工具,如果您可以通过ssh登录,因为它仅复制差异,并且在连接断开时可以很容易地在中间重新启动。
ssh -r是递归复制目录结构的第二好的选择。

请参见:


rsync手册页
ssh手册页


评论


不安全,仅ftp

– JosFabre
2015年9月25日下午16:34

现在是2015年。不应使用FTP。

–提洛
2015年9月29日,下午3:22

我同意。并且应该始终提出提高安全性的建议。但是问题是关于FTP的,所以说一个人不应该使用它是没有帮助的

– JosFabre
2015年10月8日在8:43

我谨不同意。他们为这项工作使用了错误的工具。他们应该学会使用安全的最新工具,而不是1980年代的ftp。更具体地说,没有人应该再运行ftp服务器了:P

–提洛
2015年10月9日在5:14



抱歉,但是就在上周,我正在访问仅具有FTP连接的服务器。我的任务是将其迁移。

–安蒂·哈帕拉(Antti Haapala)
16年3月11日在19:37

#12 楼

通过PROMPT命令切换提示。

用法:

ftp>cd /to/directory    
ftp>prompt    
ftp>mget  *


评论


Down0投票:mget不是递归的。

–兰斯·克利夫兰
13-10-24在22:49