我正在通过网络提供一个目录,我有兴趣监控它。它的内容是我正在使用的各种版本的软件,我想编写一个我可以运行的脚本来检查那里的内容,并下载任何比我已经获得的更新的内容。
有没有办法,比如用wget
或其他东西来获取目录列表。我已经尝试在目录上使用wget
,这给了我html。为了避免解析html文档,有没有办法检索像ls
这样的简单列表?
答案 0 :(得分:22)
我刚刚想出办法:
$ wget --spider -r --no-parent http://some.served.dir.ca/
它非常冗长,所以你需要根据你所追求的内容多次管道grep
,但信息就在那里。看起来它打印到stderr,所以追加2>&1
让grep
放在它上面。我贪图“\ .tar \ .gz”找到该网站提供的所有tar包。
请注意wget
将临时文件写入工作目录,并且不会清除其临时目录。如果这是一个问题,您可以更改为临时目录:
$ (cd /tmp && wget --spider -r --no-parent http://some.served.dir.ca/)
答案 1 :(得分:2)
以下不是递归的,但它对我有用:
$ curl -s https://www.kernel.org/pub/software/scm/git/
输出为HTML并写入stdout
。与wget
不同,没有任何内容写入磁盘。
-s
(--silent
)是相关的,特别是在一个不能产生噪音的脚本中。
请尽可能记住不要使用ftp
或http
代替https
。
答案 2 :(得分:1)
如果它由http提供,则无法获得简单的目录列表。您在浏览时看到的列表(wget正在检索的列表)由Web服务器生成为HTML页面。您所能做的就是解析该页面并提取信息。
答案 3 :(得分:1)
您要求使用FTP而不是HTTP提供最佳服务。
HTTP没有目录列表的概念,FTP确实如此。
大多数HTTP服务器不允许访问目录列表,而那些正在执行此操作的是服务器的功能,而不是HTTP协议。对于那些HTTP服务器,他们决定为人力消费生成并发送HTML页面,而不是机器消费。你无法控制它,除了解析HTML之外别无选择。
FTP专为机器消耗而设计,更多是通过引入替换模糊MLST
命令的MLSD
和LIST
命令而设计的。
答案 4 :(得分:0)
AFAIK,出于安全考虑,无法获得类似的目录列表。您的目标目录具有HTML列表是相当幸运的,因为它允许您解析它并发现新的下载。
答案 5 :(得分:0)
您可以使用IDM(互联网下载管理器)
它有一个名为“ IDM SITE GRABBER”的实用程序,输入了http/https
URL,它将为您下载http/https
协议中的所有文件和文件夹。