下载后wget不保存文件

Tah*_*155 8 wget powershell

所以我目前正在使用wgetwindows 10 powershell 上的命令来下载各种文件。但是,在测试此命令时,实际上并未下载文件。

例如,假设我想下载一个图像,比如https://picsum.photos/200,我将使用以下命令:

PS C:\Users\myname\Desktop> wget https://picsum.photos/200

返回一个明显成功的结果:

StatusCode        : 200
StatusDescription : OK
Content           : {255, 216, 255, 224...}
RawContent        : HTTP/1.1 200 OK
                Access-Control-Expose-Headers: Content-Length
                Content-Disposition: inline;filename=""
                Vary: Origin
                Access-Control-Allow-Origin: *
                X-Content-Type-Options: nosniff
                X-XSS-Protection...
Headers           : {[Access-Control-Expose-Headers, Content-Length], [Content-Disposition, inline;filename=""],
                [Vary, Origin], [Access-Control-Allow-Origin, *]...}
RawContentLength  : 31273
Run Code Online (Sandbox Code Playgroud)

此过程完成后,我不会在桌面上观察到任何新文件。

但是,此代码确实有效:

wget https://picsum.photos/200 -O image.jpg
Run Code Online (Sandbox Code Playgroud)

那么发生了什么?为什么wget单独不下载文件?

roa*_*ima 17

的 Powershell 实现wget不是wget. 所以它的行为不像 UNIX/Linux 实用程序wget

正如 user4556274所指出的,Powershell 使用wgetcurl作为其自己的Invoke-WebRequest.

看看那个(或Get-Help wget在 Powershell 下运行),可以看到该-O [filename]标志是可接受的缩写-Output [filename],它Invoke-WebRequest [URI]实际上返回一个表示网页的对象,而不是编写一个以 URL 的基本名称命名的文件。

因此,除非您将其分配给变量或通过管道将其传递给另一个命令,否则这将返回“无”:

wget http://example.net/path/to/page.html
Run Code Online (Sandbox Code Playgroud)

但这会“按预期”提供一个网页:

wget http://example.net/path/to/page.html -O page.html
Run Code Online (Sandbox Code Playgroud)

  • 说得通。Powershell 使用的命令并不执行 UNIX 中众所周知的功能,这有点愚蠢 (5认同)
  • 它有一个别名(原谅我 - `Alias`)基本上是“伪造”它。另请参阅 `ls`,其中 IIRC 是 `Get-ChildItem` 的别名(具有某些参数)。 (3认同)
  • Powershell 将是 powershell。 (3认同)