像目录一样对待网页

像目录一样对待网页

我是一名 Mac 用户,我想要cd访问一个网页,然后将cp一些文件放到本地目录中。有没有办法做到这一点?

这是我所指的页面:http://www0.cs.ucl.ac.uk/staff/M.Herbster/GI07/week5/

答案1

一般来说,不可能像目录一样浏览网站,因为没有标准的方法来列出目录中的文件。事实上,网络上甚至没有目录的概念:是否提供目录中http://foo/bar/wibble调用的文件是服务器设计方式的问题,但不一定是这样。根据斜杠的数量也可能有不同的内容(例如and和返回不同的内容),这不能表示为文件路径树。wibblebarhttp://foo/bar/wibblehttp://foo/bar/wibble/http://foo/bar//wibble

请注意,与其他人在这里声称的不同,它可以像浏览本地文件一样浏览远程文件。例如,cd如果您安装了 FTP 站点,您就可以进入该站点;做到这一点的方法包括麦克融合在 OS X 上,gvfs 安装在带有 Gnome 的 Linux 上,卷曲文件系统在 Linux 或 OS X 上,以及AVFS。所有这些工作都通过保险丝,这是一个基本上将任何内容公开为目录树的框架。

不过,没有通用的方法可以将 Web 服务器公开为目录树,因为它实际上并不具有这种树结构。此外,对同一 URL 的请求可能会返回不同的内容(基于客户端的语言首选项、用户代理、cookie 等)。

当您访问某些 URL 时,您想要的服务器恰好会提供一个看起来像目录列表的页面。但该页面是在服务器上格式化的,与浏览器访问 FTP 站点时的格式不同。原则上,客户端可以解析它并生成目录列表;例如有一个httpfs它可以做到这一点,但它仅支持以特定方式格式化服务器站点上的目录列表的输出。实际上有一个通过 HTTP 访问目录树的标准协议 — 网络DAV- 但它不经常使用。我不知道解析 Apache 标准目录列表的实现,我认为这是您的站点所提供的服务。

如果你想在命令行下载文件,你可以使用curl。如果你想下载一个目录下的所有文件,可以使用获取(不包含在 OSX 上,但可以通过包管理器安装):

wget -r -np -l1 http://www0.cs.ucl.ac.uk/staff/M.Herbster/GI07/week5/

wget -r -np http://…类似于cp -r http://… .,但递归的工作方式不同。cp通过枚举目录中的文件来复制目录,包括递归作用的子目录,并通过创建具有相同内容的文件来复制常规文件。在网络上,目录和常规文件之间没有区别;wget通过跟踪 HTML 页面中的所有链接进行递归。该选项-r指示wget递归复制,并-np告诉它不要遵循指向“向上”的链接 - 这是文本问题:它仅遵循目标开头的链接http://www0.cs.ucl.ac.uk/staff/M.Herbster/GI07/week5/(具有实现相同结果的相对链接的规则)。该选项-l1是一种额外的安全措施,告诉它在一级后停止递归(即,它遵循给定 URL 处的 HTML 文件的链接,然后停止);这不是必需的,但建议避免由于您没有注意到的额外链接而导致递归下载为您提供的材料比您最初预期的多得多的情况。

答案2

喜欢显示名称他在回复中提到你不能光盘进入一个网站。光盘如果不与其他命令一起使用来远程访问计算机,则该命令仅适用于本地计算机上的目录SSH。你需要一个像这样的命令获取或者卷曲从网上下载一些东西。除了卷曲你可以使用的例子获取像这样:

下载某个文件
wget http://www0.cs.ucl.ac.uk/staff/M.Herbster/GI07/week5/dtrain123.dat
从此目录下载具有特定文件扩展名的文件
wget -rl1 -A .dat http://www0.cs.ucl.ac.uk/staff/M.Herbster/GI07/week5/
下载该目录下的所有文件
wget -r -np -l1 http://www0.cs.ucl.ac.uk/staff/M.Herbster/GI07/week5/

命令选项说明:
-r 递归下载(小心!)
- 允许的文件扩展名的逗号分隔列表
-l 递归的最大深度,而“inf”或“0”表示无限。
-np 省略父目录
所使用的url是指您提到的url

相关内容