如何阻止wget为开启Options +Indexes的目录生成index.html文件
我明白你的困扰——用wget镜像目录树时,服务器开启了目录索引(Options +Indexes),wget会自动把每个目录的动态索引页面存成index.html,而且你用--reject-regex index.html还不管用,这确实头疼。
之所以你的--reject-regex index.html规则无效,核心原因是:wget访问的是目录本身的URL(比如https://example.com/folders/sub/),而不是一个实际存在的index.html文件。服务器动态生成索引页面后,wget会默认把这个响应保存为对应目录下的index.html,但你的规则是匹配请求URL里的内容,目录URL里并没有index.html,所以这个规则根本不会触发。
下面给你两个可行的解决方案:
方案一:事后自动删除生成的index.html(最稳妥)
这是最直接可靠的方法,在wget命令执行完成后,用find命令批量删除所有自动生成的index.html文件。修改后的命令如下:wget -m -e robots=off --no-parent --reject-regex aaa --no-verbose --timestamp https://example.com/folders/ && find ./folders -name "index.html" -type f -delete这样既完成了目录树的镜像,又能自动清理掉那些不需要的动态生成页面。
方案二:调整wget参数尝试避免保存索引页面(有局限性)
如果你不想事后删除,可以尝试拆分-m(镜像)参数的组合,去掉可能导致保存索引页面的隐含设置。-m等价于-r -N -l inf --no-remove-listing,其中--no-remove-listing主要针对FTP,HTTP环境下我们可以去掉它,改用手动指定参数:wget -r -N -l inf -e robots=off --no-parent --reject-regex 'index.html|aaa' --no-verbose --timestamp https://example.com/folders/不过这个方法不一定在所有服务器环境下都生效,因为wget在HTTP模式下访问目录URL时,还是可能会把返回的索引页面存为
index.html,所以方案一更稳妥。
备注:内容来源于stack exchange,提问作者KevinHJ

