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

Cha*_* Ma 308 linux ftp command-line

我正在尝试使用命令行ftp client ftp文件夹,但到目前为止我只能使用'get'来获取单个文件.

Thi*_*ère 607

你可以依赖通常处理ftp的wget得到正确的(至少在我自己的经验中).例如:

wget -r ftp://user:pass@server.com/
Run Code Online (Sandbox Code Playgroud)

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

如果您在凭据详细信息中有一些特殊字符,则可以指定--user--password参数以使其起作用.使用特定字符的自定义登录示例:

wget -r --user="user@login" --password="Pa$$wo|^D" ftp://server.com/
Run Code Online (Sandbox Code Playgroud)

编辑 正如@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.
Run Code Online (Sandbox Code Playgroud)

如果您不想错过子目录,请更好地使用镜像选项-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.
Run Code Online (Sandbox Code Playgroud)

  • 更好地使用`wget -m`(` - mirror`).`wget -r`默认限制为递归深度为5. (115认同)
  • 您可以使用`-l 0`设置无限递归级别,因此不需要使用可能具有一些不需要的副作用的`--mirror`,例如.listing文件 (60认同)
  • 我使用`wget --ask-password -rl 99 ftp:// user @ server.com`.这样,使用`ps`看不到密码,并且密码不会保留在历史记录中.当然,根据ftp的性质,它会以未加密的形式发送到服务器. (27认同)
  • 我不得不在Red Hat上使用`--user`和`--password`.我的wget是:``GNU Wget 1.11.4 Red Hat modified`我想知道它是版本的东西还是发行版的东西...... (13认同)
  • 提醒bash newbs:如果你的用户名或密码有控制字符(如`$`),你必须使用单引号,例如`--user ='user' - password ='pa $$ word'` (5认同)

Lud*_*uty 159

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

我用了

wget -r -nH --cut-dirs=5 -nc ftp://user:pass@server//absolute/path/to/directory
Run Code Online (Sandbox Code Playgroud)

请注意服务器名称后面的双斜杠.如果我没有添加额外的斜杠,则路径相对于用户的主目录.

  • -nH避免创建以服务器名称命名的目录
  • -nc避免创建一个新文件,如果它已经存在于目标上(刚刚被跳过)
  • --cut-dirs = 5允许我将/ absolute/path /的内容带到/目录并将其放在我启动wget的目录中.数字5用于过滤掉路径的5个组件.双斜杠意味着额外的组件.

  • 真棒!如果您不想在命令行上输入密码,可以使用`--ftp-user = USER`和`--ask-password`. (4认同)
  • 辉煌.跳过已存在的文件的能力非常适合追赶服务器迁移的最新补充.rsync更高效,更灵活,但有时候该选项不可用,只能使用FTP. (3认同)
  • 我并不总是信任"跳过现有文件",因为其中一个可能不完整或者大小和内容不同但是很好,他提到了选项 (2认同)

Vin*_*vic 25

ncftp -u <user> -p <pass> <server>
ncftp> mget directory
Run Code Online (Sandbox Code Playgroud)

  • 这不符合Ubuntu 14.04的规定.对我有用的语法是"get -R directory"而不是mget. (3认同)

Dil*_*war 21

如果lftp您的计算机上已安装,请使用mirror dir.你完成了.如果要递归下载目录,请参阅下面的Ciro注释.

  • 顺便说一句,`mirror -R dir`执行递归目录上传/更新 (7认同)

Gre*_*ill 17

如果您可以使用scp而不是ftp,该-r选项将为您执行此操作.我会检查你是否可以使用比FTP更现代的文件传输机制.

  • 我投了这个,因为这完全是我的第一个想法,即使它没有严格按照原样回答问题. (2认同)

Jas*_*son 9

请改用WGet.它支持HTTP和FTP协议.

wget -r ftp://mydomain.com/mystuff
Run Code Online (Sandbox Code Playgroud)

祝好运!

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


小智 7

有'ncftp'可以在linux中安装.这适用于FTP协议,可用于递归下载文件和文件夹.适用于Linux.已经使用并且正常用于递归文件夹/文件传输.

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

  • ncftp也适用于Windows (2认同)