Powershell 等效于 wget 开关“-nc”和“-i”

Powershell 等效于 wget 开关“-nc”和“-i”

这个 wget 命令的 Powershell 等效命令是什么?

wget -nc -i downloadList.txt

在哪里

-i 下载列表.txt
下载指定文件中的 URL 列表。

-数控
跳过已下载的文件。

答案1

您不仅可以使用 PowerShell cmdlet,还可以使用 .Net 类。

对于 -nc 部分,获取文件内容并仅使用cat(的别名Get-Content)和sort(的别名Sort-Object)选择唯一字符串。然后在此字符串列表中使用wget(的别名),从 URL 中提取输出文件名Invoke-WebRequestGetFileName

cat downloadList.txt | foreach {wget $_ -OutFile ([System.IO.Path]::GetFileName($_))}

答案2

没有 Powershell 开关的行为与-nc

它不仅可以防止覆盖文件。它还会检查目标文件是否已存在,并且不会启动第二次下载。其全部目的-nc就是防止实际下载。

-数控

--no-clobber

如果文件在同一个目录中被多次下载,Wget 的行为取决于几个选项,包括 -nc。在某些情况下,重复下载后本地文件将被破坏或覆盖。在其他情况下,它将被保留。

运行不带 -N、-nc 或 -r 的 Wget 时,在同一目录中下载同一文件将导致文件的原始副本被保留,而第二份副本将被命名为 file.1。如果再次下载该文件,第三份副本将被命名为 file.2,依此类推。当指定 -nc 时,将抑制此行为,并且 Wget 将拒绝下载文件的较新副本。因此,在这种模式下,“no-clobber”其实是一个误称。它阻止的不是破坏(因为数字后缀已经阻止了破坏),而是多版本保存。

当使用 -r 运行 Wget 时,但不使用 -N 或 -nc,重新下载文件将导致新副本覆盖旧副本。添加 -nc 将阻止此行为,而是保留原始版本并忽略服务器上任何较新的副本。

当使用 -N 运行 Wget 时,无论是否使用 -r,是否下载文件的较新副本取决于本地和远程时间戳以及文件大小。-nc 不能与 -N 同时指定。

请注意,当指定 -nc 时,后缀为 .html 或 (yuck) .htm 的文件将从本地磁盘加载并进行解析,就像它们是从 Web 检索到的一样。

因此,在 Powershell V3 中,您必须模仿这种行为。简而言之:

  • 获取给定文件夹(下载目标)中文件的所有基本名称(无扩展名)
  • 获取给定文本文件 (downloadList.txt) 的所有 URL
  • 比较两个列表并检索缺失的 URL
  • 仅发送缺失的 URLInvoke-Webrequest并附加html为扩展名
$folder = "D:\my\folder"
Compare $(Dir $folder).BaseName (gc "D:\downloadList.txt")  -PassThru | 
    where {$_.SideIndicator -eq '=>'} | 
    foreach { wget $_ -OutFile "$folder\$_.html" }

不打高尔夫

$folder = "D:\my\folder"
$exists = $(Get-ChildItem $folder).BaseName
$urls = Get-Content "D:\downloadList.txt" 
$missing = Compare $exists $urls  -PassThru | where {$_.SideIndicator -eq '=>'}
$missing  | foreach { Invoke-WebRequest -Uri $_ -OutFile "$folder\$_.html" }

相关内容