如何在Linux上通过FTPrecursion下载文件夹

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

你可以依靠通常处理ftp的wget获得正确的(至less在我自己的经验)。 例如:

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

您也可以使用适合镜像的-m 。 它目前相当于-r -N -l inf

如果您在凭证详细信息中有一些特殊字符,则可以指定--user--password参数使其--password 。 具有特定字符的自定义login示例:

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

编辑正如@asmaier指出的那样,注意,即使-r是recursion,它的默认最高级别是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. 

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

我用了

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

请注意服务器名称后面的双斜线。 如果我没有额外的斜杠,path是相对于用户的主目录。

  • -nH避免创build一个以服务器名称命名的目录
  • -nc避免创build一个新的文件,如果它已经存在于目的地(它只是跳过)
  • –cut-dirs = 5允许我把/ absolute / path /目录的内容放在我启动wget的目录中。 数字5用于过滤path的5个组件。 双斜杠意味着一个额外的组件。
 ncftp -u <user> -p <pass> <server> ncftp> mget directory 

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

如果lftp安装在您的机器上,请使用mirror dir 。 你完成了。 如果要recursion下载目录,请参阅下面的Ciro的注释。

有'ncftp'这是可用于在Linux安装。 这适用于FTP协议,可用于recursion下载文件和文件夹。 在linux上工作。 已被使用,并正在为recursion文件夹/文件传输正常工作。

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

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

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

祝你好运!

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

如果你想坚持命令行FTP,你应该尝试NcFTP。 然后你可以使用get -R来recursion地获取一个文件夹。 你也将完成。

如果可以的话,我强烈build议你使用tarbzip (或者gzip ,不pipe漂浮在你的船上)远程机器上的目录 – 对于任何大小的目录来说,节省带宽可能值得花时间来压缩/解压缩。

wget -r ftp://url

为Redhat和Ubuntu完美工作

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

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

  • 如果您可以通过sshrsync是最适合的工具,因为它仅复制差异,并且可以在连接中断的情况下轻松地重新启动。

  • ssh -r是recursion复制目录结构的第二好select。

看到:

  • rsync手册页

  • ssh手册页

试试mget:

  mget remote-files Expand the remote-files on the remote machine and do a get for each file name thus produced. See glob for details on the filename expansion. Resulting file names will then be processed according to case, ntrans, and nmap settings. Files are transferred into the local working directory, which can be changed with 'lcd directory'; new local directories can be created with '! mkdir directory'. 

您可能还需要closures提示,以便不要求每个文件(请参阅propmt命令)

但是如果可以的话,通过ssh使用scp或rsync可能比ftp更好。

回顾一下:

 cd /dir prompt interactive mode off mget * 

通过PROMPT命令切换提示。

用法:

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