题 使用wget递归下载整个FTP目录


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

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

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

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

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


87
2018-06-13 09:21




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


答案:


尝试 -m 对于 --mirror

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

119
2018-06-13 10:04



出于安全原因,使用起来会很好 --ask-password 避免密码被保留 history。 - checksum
这太酷了。工作就像一个魅力.. - Sambhav Sharma
这应该是公认的答案(为了更好的可见性)。 - bgondy
它不包括下载目录的路径,我猜@Formoda答案更好 - Wasim A.


你做对了,你最后需要一个尾随*:

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命令不起作用,第二个命令工作正常。


36
2018-06-22 12:35



这只会深入一个目录。更好地使用-m标志 - SvennD
在某些情况下,由于空间,第二个命令无法正常工作,您可以像这样使用第一个命令进行共享托管。 ** wget -r ftp://用户名%40host:密码@ host / dir / ** - Wasim A.
注意:你应该使用其中之一 -m 要么 -r -l inf 因为-r的默认递归深度为5.请参阅 gnu.org/software/wget/manual/... - ndemou


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

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

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


6
2018-06-13 18:04





您可以使用'curlftpfs - 将ftp主机安装为本地目录',一旦安装,您可以使用普通的文件工具,如'cp -r'。


5
2018-06-13 21:22



curlftpfs 除非你降级,否则现在有重大的性能问题 libcurl3-gnutls - Hengjie


检查以下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:用于忽略父目录的数量。此选项的值将因命令而异。

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


4
2017-07-24 04:48





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

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


3
2018-06-17 11:56





应该尝试:

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

2
2018-06-13 09:54





使用:

wget -m ftp://192.168.0.1

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


2
2018-06-13 14:07



正如我所说,通过FTP登录将我带到/ home / admin文件夹,我需要的文件在/ var / www / html所以当我运行你建议的命令时,我只得到/ home / admin的内容我试过用它来运行它 192.168.0.1/var/www/html,但后来它尝试CWD / home / admin / var / www / html。如何从根目录转到此文件夹?
我对此特定问题没有经验,但您可以尝试在家中创建符号链接到/ var / www / html。然后你可以使用像这样的地址 192.168.0.1/html - prestomation
我尝试创建一个符号链接,但结果是wget在我的本地创建了一个类似的符号链接。


这是正确的语法。不确定为什么你没有得到预期的结果。

与以往一样,有不止一种方法可以做到这一点。试试ncftp,特别是ncftpget


1
2018-06-13 09:27



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


我可以理解你是否试图将其转储到cron或其他东西,但为什么不简单地使用普通客户端和mget * ftp进入服务器?这可能是通向成功的更快捷途径。


1
2018-06-13 13:37



我尝试了mget *但它不适用于子文件夹,说本地子文件夹不存在。有没有办法让他自动创建本地文件夹?
根据您的客户端,-r开关通常可以解决问题。 IE:mget -r * - dr.pooter
嗯。 Linux中的AFAIK标准ftp客户端不是为递归检索目录而设计的。我的意思是 - 没有-r选项。其他客户端如ncftp或lftp支持递归检索,但默认情况下它们通常不可用。 - Stann


正如我所说,通过FTP登录   带我到/ home / admin文件夹,   以及我需要的文件   在/ var / www / html等

我认为这适用于您的情况:

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

1
2018-06-21 21:25