Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Linux上通过FTP递归下载文件夹_Linux_Command Line_Ftp - Fatal编程技术网

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

如何在Linux上通过FTP递归下载文件夹,linux,command-line,ftp,Linux,Command Line,Ftp,我正在尝试使用命令行ftp客户端ftp文件夹,但到目前为止,我只能使用“get”获取单个文件 如果您可以使用scp而不是ftp,则-r选项将为您执行此操作。我想看看你是否可以使用比FTP更现代的文件传输机制。你可以依靠wget,它通常能正确地处理FTP get(至少在我自己的经验中是这样)。例如: wget -r ftp://user:pass@server.com/ 您还可以使用适用于镜像的-m。它目前相当于-r-N-l inf 如果凭证详细信息中有一些特殊字符,可以指定--user和--p

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

如果您可以使用
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:

如果不想遗漏子曲面,最好使用镜像选项,
-m

ncftp-u-p
ncftp>mget目录

如果可以,我强烈建议您
tar
bzip
(或
gzip
,无论您的船在哪里)将远程计算机上的目录作为任何重要大小的目录,节省的带宽可能值得花时间压缩/解压缩。

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

wget -r ftp://mydomain.com/mystuff
祝你好运


参考资料:

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


检查此链接

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

wget-rftp://url


适用于Redhat和Ubuntu

通过提示符命令切换提示符

用法:

ftp>cd /to/directory    
ftp>prompt    
ftp>mget  *
只是补充一下

我曾经

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类似,telnet不使用安全协议,密码以明文传输。这使得第三方很容易获取您的用户名和密码

要远程复制远程目录,以下选项更好:

    <>代码> RSYNC 是最合适的工具,如果您可以通过<代码> SSH 登录,因为它只复制差异,并且在连接中断的情况下可以很容易地在中间重新启动。

  • ssh-r
    是递归复制目录结构的第二个最佳选项

见:

  • 手册页

  • 手册页


我投了赞成票,因为这正是我的第一个想法,尽管它并没有严格地回答这个问题。你建议哪一个@greg hewgill?我有类似的问题,scp仍然会尝试使用ssh,如果您只有FTP凭据,ssh将无法工作。回应2008年的一条评论,说我一直使用的技术不现代,感觉很奇怪:(好旧的2008年,你发表评论的那天我18岁了。我也喜欢在windows上使用ncftp!谢谢。最好使用
wget-m
--mirror
)默认情况下,
wget-r
的递归深度限制为5。我也必须在Red Hat上使用
--user
--password
。我的wget是:
GNU wget 1.11.4 Red Hat modified
我想知道它是版本还是发行版…你可以用
-l 0
设置无限递归级别,所以不需要使用
--镜像
可能有一些不必要的副作用,例如。列出我使用的文件ftp://user@server.com。这样,密码在
ps
中不可见,并且不会保留在历史记录中。当然,根据ftp的性质,它会以未加密的方式发送到服务器。bash新手提醒:您必须如果您的用户名或密码包含控制字符(如
$
),请使用单引号,例如,
--user='user'--password='pa$$word'
我无法使用参数登录到FTP服务器,而是使用结构
打开ftp://USERNAME:PASSWORD@主机
启动ncftp后…+1-我知道这篇文章很旧,但我只是偶然发现它,ncftp非常容易使用。我使用-R来递归获取ncftpgets肯定更多比wget更可靠,在TAR模式下也更快。谢谢!这不符合Ubuntu 14.04的规定。我使用的语法是“get-R目录”代替了mget。在Ubuntu 14.04上为我工作。我不需要mget,它就在那里。非常棒。跳过已经存在的文件的能力对于在服务器迁移中赶上最新添加的文件非常有用。rsync更高效、更灵活,但有时该选项不可用,只能使用FTP。很好的参数这里特别是-nc和-cut dirs。感谢分享!我并不总是相信“跳过现有文件”,因为其中一个文件可能不完整,或者大小和内容不同,但很好,他提到了
wget -r ftp://mydomain.com/mystuff
ftp>cd /to/directory    
ftp>prompt    
ftp>mget  *
wget -r -nH --cut-dirs=5 -nc ftp://user:pass@server//absolute/path/to/directory