我想将所有文件和文件夹从一台主机复制到另一台主机。
旧主机上的文件位于/ var / www / html,并且我只能通过FTP访问该服务器,而我无法TAR所有文件。
通过FTP到旧主机的定期连接将我带到/ home / admin文件夹。

我尝试从新服务器上运行以下命令:

wget -r ftp://username:password@ip.of.old.host


但是我得到的只是一个编好的index.html文件。

通过FTP递归使用wget的正确语法是什么?

/>

评论

请注意,默认情况下,wget -r的最大递归深度为5;默认值为0。如果您有更深的子目录,除非您更改此子目录,否则它们将被忽略(请参见手册页中的-l)。

#1 楼

尝试将-m用于--mirror

wget -m ftp://username:password@ip.of.old.host


评论


出于安全原因,最好使用--ask-password避免将密码保留在历史记录中。

–校验和
2014年10月4日在2:49

太酷了像魅力一样工作。

– Sambhav Sharma
2015年10月7日在21:11

这应该是可接受的答案(以提高可见性)。

–阴郁
16年3月3日在15:52

它不包含要下载的目录路径,我想@Formoda的答案更好

– Wasim A.
17年4月24日在6:38

@WasimA。,您也可以在此处添加目录路径:wget -m ftp:// username:password@ip.of.old.host/mydir/

– Alex Che
19年5月16日在15:28

#2 楼

没错,您只需要在末尾加一个*:

wget -r ftp://username:password@1.2.3.4/dir/*


对于共享服务器,您可以这样使用:

wget -r ftp://1.2.3.4/dir/* --ftp-user=username --ftp-password=password


因为大多数共享服务器具有ftp-username之类的名称,例如username @ hostname,所以,第一个wget命令不起作用,第二个命令可以正常工作。

评论


这只会深入一个目录。最好使用-m标志

– SvennD
15年8月13日在12:18



在某些情况下,由于空间不足,第二个命令不起作用,您可以像这样使用第一个命令进行共享托管。 ** wget -r ftp:/ /用户名%40host:password @ host / dir / **

– Wasim A.
17-4-24在7:11



注意:您应该使用-m或-r -l inf,因为-r的默认递归深度为5。请参阅gnu.org/software/wget/manual/…

– ndemou
17-10-10在20:45

#3 楼

除了wget,您还可以在脚本模式下使用lftp。以下命令会将给定的远程FTP目录的内容镜像到给定的本地目录中,并且可以将其放入cron作业中:

lftp -c 'open <hostname>; user <username> <password>; mirror -e <remote-src-path> <local-dest-path>; quit'


它自动处理递归进入目录,并允许从中指定远程源起始目录以从中下载数据。

#4 楼

您可以使用“ curlftpfs-将ftp主机作为本地目录挂载”,一旦挂载,您就可以使用“ cp -r”等普通文件工具。

评论


curlftpfs现在有主要的性能问题,除非您将libcurl3-gnutls降级

–恒杰
2015年2月6日下午5:40

#5 楼

检查以下wget命令以递归方式从FTP下载数据。

wget --user="<user-name>" --password="<password>" -r -np -nH --cut-dirs=1 --reject "index.html*" "<URL to download files>"


-r:用于递归下载。

-np:不用于父级

-nH:用于禁止创建名称与URL相同的目录,即abc.xyz.com

--cut-dirs:用于忽略父目录的数量。此选项的值因您的命令而异。

您可以通过执行以上命令进行检查。

#6 楼

由于递归深度,请使用-m而不是-r。

http://www.editcorp.com/Personal/Lars_Appel/wget/wget_2.html#SEC11

#7 楼

应该可以尝试:

wget -r ftp://ftp:ftp@ftp.sunet.se/tst/


#8 楼

使用:

wget -m ftp://192.168.0.1


,它将镜像所有文件和文件夹。

评论


就像我说的那样,通过FTP登录会将我带到/ home / admin文件夹,并且我需要的文件位于/ var / www / html中,所以当我运行您建议的命令时,我只会得到/ home / admin的内容我尝试使用192.168.0.1/var/www/html运行它,但随后尝试CWD / home / admin / var / www / html。如何使其从根目录转到该文件夹​​?

–user9406
09年6月13日在17:23

我没有这个特殊问题的经验,但是您可以尝试在您家的下方建立一个符号链接到/ var / www / html。然后您可以使用192.168.0.1/html之类的地址

–保存
09年6月13日在17:29

我尝试创建符号链接,但是wget在本地创建了类似的符号链接。

–user9406
09年6月13日在17:32

#9 楼

那是正确的语法。不知道为什么您没有得到预期的结果。

和以往一样,有多种方法可以做到这一点。尝试ncftp,尤其是ncftpget

评论


我无法在新服务器上安装更多软件。我不应该告诉wget从/ var / www / html下载所有文件吗?我尝试了wget -r username:password@ip.of.old.host/var/www/html,但是我发现目录未找到错误。

–user9406
09年6月13日在9:37

#10 楼

我能理解您是否尝试将其转储到cron或其他东西中,但是为什么不使用普通的客户端和mget *来简单地ftp到服务器中呢?这可能是一条通往成功的捷径。

评论


我尝试了mget *,但不适用于子文件夹,因为它说本地子文件夹不存在。有没有办法让他自动创建本地文件夹?

–user9406
09年6月13日在17:16

根据您的客户端,-r开关通常可以解决问题。 IE:mget -r *

–博士
09年6月15日在6:17

嗯Linux中的AFAIK标准ftp客户端并非旨在递归检索目录。我的意思是-没有-r选项。其他客户端(例如ncftp或lftp)支持递归检索,但默认情况下通常不可用。

–斯坦
2011-2-13在5:42



#11 楼


如我所说,通过FTP登录
将我带到/ home / admin文件夹,
,我需要的文件位于
/ var / www / html


我认为这可以解决您的情况:

wget -r ftp://192.168.0.1/../../var/www/html


#12 楼

我遇到了Windows托管,其用户名为brinkster / username,因此,如果使用以下语法,wget会引发错误:

wget -m ftp://brinkster/username:password@ip.of.the.host


要克服这个问题,请使用

wget -m ftp://brinkster%2Fusername:password@ip.of.old.host


我不得不在Windows主机@ brinkster面前面对这一问题。

#13 楼

wget --user username --password yourpassword ftp://example.com/ftpfiles/filename可以完成这项工作,或者您可以添加*而不是输入文件名:使wget想到在您的情况下无效的端口。

评论


这个对已有四年历史的问题的答案带有多个被投票的答案,并没有提供新的内容,甚至没有提供递归副本的要求。

– Sven
13年6月20日,0:10