如何递归下载一个文件夹通过FTP在Linux

我试图使用命令行ftp客户端ftp文件夹,但到目前为止,我只能使用“get”来获取单个文件。

562651 次浏览

如果你可以使用scp而不是ftp-r选项将为你做到这一点。我会检查一下你是否可以使用比FTP更现代的文件传输机制。

您可以依赖wget,它通常正确地处理ftp get(至少在我自己的经验中)。例如:

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/

正如@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.

如果你不想错过subdirs,最好使用镜像选项-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.
ncftp -u <user> -p <pass> <server>
ncftp> mget directory

如果可以的话,我强烈建议你在远程机器上tarbzip(或者gzip,随便你怎么想)目录——对于任何大小的目录,节省的带宽可能都是值得花时间压缩/解压缩的。

使用WGet代替。支持HTTP和FTP协议。

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

好运!

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

在linux中可以安装“ncftp”。它在FTP协议上工作,可用于递归地下载文件和文件夹。适用于linux。用于递归文件夹/文件传输,并且运行良好。

检查这个链接…http://www.ncftp.com/

如果您想坚持使用命令行FTP,那么应该尝试NcFTP。然后可以使用get -R来递归地获取文件夹。你也会得到圆满。

wget -r ftp://url

适用于Redhat和Ubuntu

通过prompt命令切换提示符。

用法:

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

只是为了补充Thibaut的回答Barrè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的内容,并将其放在启动wget的目录中。数字5用于过滤掉路径的5个组成部分。双斜杠表示一个额外的组件。

如果你的机器上安装了lftp,请使用mirror dir。这样就做完了。如果您想递归下载一个目录,请参阅下面Ciro的注释。

你不应该使用ftp。像telnet一样,它没有使用安全协议,密码以明文传输。这使得第三方很容易获取您的用户名和密码。

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

  • 如果你可以通过ssh登录,rsync是最适合的工具,因为它只复制差异,并且在连接中断时可以很容易地在中间重新启动。

  • ssh -r是递归复制目录结构的次优选项。

要递归地获取文件,你可以使用这样的脚本: https://gist.github.com/flibbertigibbet/8165881 < / p >

看到的: