使用wget从ftp服务器下载选定的目录

6

我正在尝试理解如何使用wget从来自美国政府的各种不同ftp站点下载特定目录的经济数据。

作为一个简单的例子,我知道可以使用以下命令下载整个目录:


```bash wget -r ftp://example.com/directory/ ```

但是,如果我只想要该目录中的特定子目录(例如,仅限于2018年数据)该怎么办?

wget  --timestamping  --recursive --no-parent ftp://ftp.bls.gov/pub/special.requests/cew/2013/county/

但我希望能运行更复杂的下载,例如我可能只想限制下载到几个目录。因此我一直在研究 --include 选项。但我并不真正理解它是如何工作的。具体来说,为什么这样做不起作用:

wget --timestamping --recursive -I /pub/special.requests/cew/2013/county/ ftp://ftp.bls.gov/pub/special.requests/cew/

以下代码可以正常工作,也能下载文件,但它会下载比我需要的更多(2013年目录中的所有内容,而不仅仅是县级子目录):
wget --timestamping --recursive -I /pub/special.requests/cew/2013/ ftp://ftp.bls.gov/pub/special.requests/cew/

我不确定是我对wget的理解有问题还是我的问题与ftp服务器结构更基本相关。
感谢您的帮助!

我的wget安装版本没有记录“--include”选项,尽管如果我指定它,它不会显示任何错误。你尝试使用“--include-directories”代替了吗? - Brian A. Henning
谢谢Lotharyx,我已经修正了拼写错误,但我的问题仍然存在。 - Al R.
尝试使用“--include-directories=whatever...”——我阅读的手册上显示有一个等号。我手头没有FTP服务器来实际尝试它。 - Brian A. Henning
我试了一下,但没有成功。 - Al R.
2个回答

3
根据这篇文档,看起来wget的过滤功能非常有限。

使用--recursive选项时,wget将在应用各种过滤器(如--no-parent-I-X-A-R选项)后下载所有链接的文档。

以你的示例为例:

wget -r -I /pub/special.requests/cew/2013/county/ ftp://ftp.bls.gov/pub/special.requests/cew/

这不会下载任何东西,因为 -I 选项指定仅包括与 /pub/special.requests/cew/2013/county/ 匹配的链接,但在页面 /pub/special.requests/cew/ 上没有这样的链接,所以下载会在那里停止。不过,这个命令会起作用:

wget -r -I /pub/special.requests/cew/2013/county/ ftp://ftp.bls.gov/pub/special.requests/cew/2013/

因为在这种情况下,/pub/special.requests/cew/2013/页面确实有一个指向county/的链接。

顺便说一句,您可以在此文档中找到比man页面更详细的信息:

http://www.gnu.org/software/wget/manual/html_node/


2

你不能简单地执行(并根据需要添加--timestamping / --no-parent等)吗?

 wget -r ftp://ftp.bls.gov/pub/special.requests/cew/2013/county

-I 似乎只能逐级工作,所以如果我们从 county/ 向上走一步,我们可以这样做:
 wget -r -I /pub/special.requests/cew/2013/county/ ftp://ftp.bls.gov/pub/special.requests/cew/2013/

但是显然我们无法进一步提高和执行。
 wget -r -I /pub/special.requests/cew/2013/county/ ftp://ftp.bls.gov/pub/special.requests/cew/

2
根据文档-I的参数必须是绝对路径。 - janos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接