在选择下载之前获取网站/网页上的文件列表(以类似于“ls”的方式)

ecj*_*cjb 7 ls download web files

假设我所在的网页上有多个 pdf 文档的超链接。我想下载那些pdf。有没有一种方法可以获取这些文档的列表(以某种方式ls),然后可以更好地选择使用wget或来下载哪个文件curl

cas*_*cas 7

您可以使用lynxlinks(文本模式 Web 浏览器)下载并显示网页中的链接列表,然后将其通过管道传输grep以仅提取 PDF 链接。例如:

URL='https://www.example.com/files/'
lynx -dump -listonly -nonumbers "$URL" | grep -i '\.pdf$'
Run Code Online (Sandbox Code Playgroud)

注意:双引号很重要"$URL",特别是当 URL 包含空格或 shell 元字符(例如;&,在 URL 中很常见)时。避免让自己头疼,在使用 URL 字符串和包含 URL 的变量时始终引用它们(事实上,在使用变量时使用双引号几乎总是一个好主意,无论它们是否包含 URL - 请参阅 Why does my shell脚本因空格或其他特殊字符而阻塞?)。

然后,您可以将grep的输出重定向到一个文件,使用文本编辑器对其进行编辑以删除您不感兴趣的 PDF 文件,然后使用 的wget( -i)--input-file=file选项下载文件中的所有 URL。wget或者您可以使用或一次手动下载它们curl


顺便说一句,wget还有一个用于镜像网站的-m( ) 选项,以及用于精确控制下载内容的众多选项(例如,接受或拒绝与后缀或某些类似 glob 的模式匹配的文件 -或- 和&对正则表达式执行相同操作),并控制 wget 是否将跟踪到其他站点(以及哪些其他站点)的链接,是否跟踪到父目录或子目录的链接(以及深度有多少层)等等。有很多选项,选项组合之间的交互甚至更多,所以不要指望立即掌握它。--mirror-A-R-A pdf-A '*.pdf'--accept-regex--reject-regex