How to recursively download a folder via FTP on Linux
我正在尝试使用命令行ftp客户机对文件夹进行ftp,但到目前为止,我只能使用"get"来获取单个文件。
- 正确答案是2011年4月6日14:13,Lkuty。不要使用mget,它根本不是递归的。08年9月22日9:01的回答Thibaut Barr&232;re更容易理解,但必须添加注释中提到的选项-l 0。
你可以依靠wget来处理ftp-get(至少在我自己的经验中)。例如:
您还可以使用适合镜像的-m。目前相当于-r -N -l inf。
如果凭证详细信息中有一些特殊字符,则可以指定--user和--password参数以使其正常工作。具有特定字符的自定义登录示例:
1
| wget -r --user="user@login" --password="Pa$$wo|^D" ftp://server.com/ |
号
编辑正如@asmaier所指出的,注意即使-r用于递归,它的默认最大级别也为5:
1 2 3 4 5 6 7
| -r
--recursive
Turn on recursive retrieving.
-l depth
--level=depth
Specify recursion maximum depth level depth. The default maximum depth is 5. |
号
如果不想漏掉子目录,最好使用镜像选项-m:
1 2 3 4 5
| -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。
- 我也不得不在红帽子上使用--user和--password。我的工作组是:GNU Wget 1.11.4 Red Hat modified,我想知道是版本问题还是发行问题…
- 您可以使用-l 0设置无限递归级别,因此不需要使用--mirror,这可能会产生一些不必要的副作用,如.listing文件。
- 哦,天哪。太神了。谢谢,先生。我还想指出,wget还下载了我的数据,包括完整的目录结构:[ip][home_folder][main_folder][etc…]之后不得不移动东西,但它把我的文件给了我。谢谢!
- 如果您不希望在历史记录中输入密码,可以通过shell脚本输入该命令。完成后请记住删除脚本。或者,您可以执行history -c。
- 这个答案太棒了!
- 我用的是wget --ask-password -rl 99 ftp://[email protected]。这样,密码在ps中不可见,也不会保留在历史记录中。当然,根据ftp的性质,它是不加密地发送到服务器的。
- -B参数在这种用法中也非常有用
- 如果我能+5这个我会的
- bash新手提醒:如果用户名或密码具有控制字符(如$,如--user='user' --password='pa$$word',则必须使用单引号。
- 如果您不能使用wget,请使用我的ftp脚本github.com/thomasx/ftpbackup
- 你应该在答案中把-r改成-m。我想5的深度限制是在爬行网站而不是在ftp上设置的。
只是为了补充蒂博·巴尔给出的答案。
我用过
1
| wget -r -nH --cut-dirs=5 -nc ftp://user:pass@server//absolute/path/to/directory |
。
注意服务器名称后面的双斜杠。如果我不加斜杠,那么路径是相对于用户的主目录的。
- -NH避免创建以服务器名称命名的目录
- -如果目标上已存在一个新文件,NC将避免创建该文件(只是跳过了该文件)。
- --cut dirs=5允许我获取/absolute/path/to/directory的内容,并将其放到我启动wget的目录中。数字5用于筛选出路径的5个组件。双斜线表示一个额外的组件。
- 太棒了。跳过已经存在的文件的能力对于赶上服务器迁移中的最新添加是很好的。rsync更高效、更灵活,但有时该选项不可用,只能使用ftp。
- 这里的参数很好,特别是-nc和-cut dirs。谢谢分享!
- 我并不总是相信"跳过现有文件",因为其中一个文件的大小和内容可能不完整或不同,但他提到了这个选项。
- 即使在今天,当无法使用rsync时,我仍然使用wget命令。-nc和-cut dirs非常有用!
- 令人惊叹的!如果不想在命令行上输入密码,可以使用--ftp-user=USER和--ask-password。
- 它根本不创建目录结构。因此,如果在不同的目录中有相同名称的文件,它们将被跳过…
- 2018年仍然很好地工作:)谢谢!
1 2
| ncftp -u <user> -p <pass> <server>
ncftp> mget directory |
- 我无法使用参数登录到FTP服务器,但在启动ncftp之后使用结构open ftp://USERNAME:PASSWORD@HOST…
- +1-我知道这篇文章很旧,但我刚看到它,ncftp非常容易使用。我用-r递归获取ncftpget
- 肯定比wget更可靠,在tar模式下也更快。谢谢!
- 这并不像Ubuntu 14.04所说的那样有效。我使用的语法是"get-r directory"而不是mget。
- 在Ubuntu 14.04为我工作。我不必担心,一切都在那里。
如果您的机器上安装了lftp,请使用mirror dir。你就完了。如果要递归下载目录,请参阅下面的ciro注释。
- btw,mirror -R dir做递归目录上传/更新
- 也可以使用mirror ./以递归方式下载当前路径中的所有文件和文件夹。
- 您还可以为当前目录及其子文件夹键入mirror。
如果您可以使用scp而不是ftp,那么-r选项将为您做到这一点。我将检查您是否可以使用比FTP更现代的文件传输机制。
- 我投了赞成票,因为这正是我的第一个想法,尽管它并没有严格回答这个问题。
- 你建议哪一个@greg hewgill?我也有类似的问题
- scp仍将尝试使用ssh,如果您只有ftp凭据,那么ssh将不起作用。对2008年的一条评论说我所使用的技术不现代感到很奇怪:(旧的2008年,你发表评论的那天我才18岁。
改用wget。它支持HTTP和FTP协议。
1
| wget -r ftp://mydomain.com/mystuff |
。
祝你好运!
参考:http://linux.about.com/od/commands/l/blcmdl1_wget.htm
有"ncftp",可在Linux中安装。这在ftp协议上工作,可以用于递归下载文件和文件夹。在Linux上工作。已被使用,并且在递归文件夹/文件传输中工作正常。
检查此链接…网址:http://www.ncftp.com/
- ncftp也可以在Windows上工作
- 我爱NCFTP!谢谢您。
如果你想坚持命令行ftp,你应该尝试ncftp。然后可以使用get-r递归地获取文件夹。你也会完成的。
如果可以的话,我强烈建议您使用tar和bzip(或gzip,无论您的船浮在哪里),远程机器上的目录对于任何大的目录来说,节省的带宽可能都是值得的。
- 可能在2008年,但在2013年带宽不再重要了,您可能有ftp但没有控制台访问权:—)
埃多克斯1〔12〕
适合Redhat和Ubuntu
你不应该使用ftp。和telnet一样,它不使用安全协议,密码以明文形式传输。这使得第三方很容易获取您的用户名和密码。
要远程复制远程目录,这些选项更好:
见:
- 不安全,只是ftp
- 现在是2015年。不应使用ftp。
- 我同意。同时,应始终提出改善安全性的建议。但问题是关于ftp,所以说不应该使用它并没有帮助
- 我尊重地不同意。他们在用错误的工具做这项工作。他们应该学会使用安全和当前的工具,而不是80年代的ftp。更具体地说,任何人都不应该再运行ftp服务器:p
- 抱歉,上周我访问的服务器只有ftp连接。我的任务是离开它。
- 哎呀!干得好!:)
切换"按提示提示"命令。
用途:
1 2 3
| ftp>cd /to/directory
ftp>prompt
ftp>mget * |