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

110 ftp recursive

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

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

wget -r ftp://username:password@ip.of.old.host
Run Code Online (Sandbox Code Playgroud)

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

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

Dav*_*ney 144

尝试-m--mirror

wget -m ftp://username:password@ip.of.old.host
Run Code Online (Sandbox Code Playgroud)

  • 出于安全原因,最好使用 `--ask-password` 以避免密码被保存在 `history` 中。 (24认同)

小智 44

你说得对,你只需要在末尾加上一个 * :

wget -r ftp://username:password@1.2.3.4/dir/*
Run Code Online (Sandbox Code Playgroud)

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

wget -r ftp://1.2.3.4/dir/* --ftp-user=username --ftp-password=password
Run Code Online (Sandbox Code Playgroud)

因为大多数共享服务器都有类似于 username@hostname 的 ftp-username,所以,第一个 wget 命令不起作用,第二个命令工作正常。

  • 这只会深入一个目录。最好使用 -m 标志 (2认同)

zap*_*pan 7

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

lftp -c 'open <hostname>; user <username> <password>; mirror -e <remote-src-path> <local-dest-path>; quit'
Run Code Online (Sandbox Code Playgroud)

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


小智 7

检查下面的 wget 命令以递归地从 FTP 下载数据。

wget --user="<user-name>" --password="<password>" -r -np -nH --cut-dirs=1 --reject "index.html*" "<URL to download files>"
Run Code Online (Sandbox Code Playgroud)

-r: 用于递归下载。

-np: 是为了没有父母升序。

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

--cut-dirs: 用于忽略父目录的数量。对于您的命令,此选项的值会有所不同。

可以通过执行上面的命令来检查。


chm*_*eee 5

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


goo*_*goo 1

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

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