![wget - 我无法下载带有“?”的文件](https://linux22.com/image/1291691/wget%20-%20%E6%88%91%E6%97%A0%E6%B3%95%E4%B8%8B%E8%BD%BD%E5%B8%A6%E6%9C%89%E2%80%9C%EF%BC%9F%E2%80%9D%E7%9A%84%E6%96%87%E4%BB%B6.png)
我想用 wget 下载一些关于 aircrack 的教程,但是失败了:
wget -r 2 http://www.aircrack-ng.org/doku.php\?id=tutorial\&DokuWiki=78e8249415a9ce232228ed8f9f02b9dd
--2011-10-06 14:16:11-- http://2/
Resolving 2... 0.0.0.2
Connecting to 2|0.0.0.2|:80... failed: Invalid argument.
--2011-10-06 14:16:11-- http://www.aircrack-ng.org/doku.php?id=tutorial&DokuWiki=78e8249415a9ce232228ed8f9f02b9dd
Resolving www.aircrack-ng.org... 213.186.33.2, 2001:41d0:1:1b00:213:186:33:2
Connecting to www.aircrack-ng.org|213.186.33.2|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
www.aircrack-ng.org/doku.php?id=tutorial&DokuWiki=78e8249415a9ce232228ed8f9f02b9dd: Invalid argument
Cannot write to `www.aircrack-ng.org/doku.php?id=tutorial&DokuWiki=78e8249415a9ce232228ed8f9f02b9dd' (Invalid argument).
你知道如何解决这个问题吗?
答案1
这可能是因为您要下载的文件系统不允许文件名中包含“?”。请注意,错误是“无法写入”。
您可以使用--restrict-file-names=windows
选项转义名称以兼容 FAT 文件系统。(请注意,wget 执行的不可逆附加%
编码实际上与 Web 架构并不正确,但您可能并不关心。)
-O <filename>
如果您只下载一个文件,您还可以使用它来指定特定的文件名。
答案2
这&
通常也会导致问题。请尝试将整个 URL 放在引号中。
答案3
根据建议pjc50,如果 URL 中有特殊字符,请将其放在引号中。因此,您应该尝试:
wget -r 2 'http://www.aircrack-ng.org/doku.php?id=tutorial&DokuWiki=78e8249415a9ce232228ed8f9f02b9dd'
当您不使用引号时,shell 在遇到 时&
会假定您想要wget
在后台运行该作业。
答案4
查看带有选项的响应标头--append-output=log.txt --server-response
。
如果Content-Disposition
标头存在且指向清晰的文件名,只需使用--content-disposition
wget 中的选项来支持此标头并替换提到的文件名。
当查询字符串(?)的存在导致“无效参数”时,它会派上用场。