1

Что такое Powershell-эквивалент этой команды wget?

wget -nc -i downloadList.txt

куда

-i downloadList.txt
загружает список URL-адресов в указанном файле.

-nc
пропускает уже загруженные файлы.

2 ответа2

1

Вы можете использовать не только командлеты PowerShell, но и классы .Net.

Для части -nc получите содержимое файла и выберите только уникальные строки с cat (псевдоним для Get-Content) и sort (псевдоним для Sort-Object). Затем используйте wget (псевдоним Invoke-WebRequest) в этом списке строк, извлекая имя выходного файла из URL с помощью GetFileName

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

Нет переключателя Powershell, который ведет себя так же, как -nc

Это не только предотвращает перезапись файла. Он также проверяет, существует ли целевой файл, и не запускает вторую загрузку. Весь смысл -nc состоит в том, чтобы предотвратить фактическую загрузку.

-nc

--no-колошматить

Если файл загружается более одного раза в один и тот же каталог, поведение Wget зависит от нескольких параметров, включая -nc. В некоторых случаях локальный файл будет засорен или перезаписан при повторной загрузке. В остальных случаях это будет сохранено.

При запуске Wget без -N, -nc или -r загрузка одного и того же файла в тот же каталог приведет к сохранению исходной копии файла, а вторая копия получит имя file.1. Если этот файл будет загружен еще раз, третья копия будет называться file.2 и так далее. Если указан параметр -nc, это поведение подавляется, и Wget откажется загружать более новые копии файла. Таким образом, «no-clobber» на самом деле является неправильным в этом режиме. Предотвращается не клобберинг (так как числовые суффиксы уже предотвращали клобберинг), а предотвращение сохранения нескольких версий.

При запуске Wget с -r, но без -N или -nc повторная загрузка файла приведет к тому, что новая копия будет просто перезаписывать старую. Добавление -nc предотвратит это поведение, вместо этого будет сохранена исходная версия и проигнорированы все более новые копии на сервере.

При запуске Wget с параметром -N, с параметром -r или без него решение о том, загружать или нет более новую копию файла, зависит от локальной и удаленной отметки времени и размера файла. -nc не может быть указан одновременно с -N.

Обратите внимание, что при указании -nc файлы с суффиксами .html или (yuck) .htm будут загружаться с локального диска и анализироваться так, как если бы они были получены из Интернета.

Итак, в Powershell V3 вы должны имитировать это поведение. В двух словах:

  • Получить все базовые имена (без расширения) файлов в заданной папке (место загрузки)
  • Получить все URL данного текстового файла (downloadList.txt)
  • Сравните оба списка и получите недостающие URL
  • Отправляйте только отсутствующие URL-адреса в Invoke-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" }

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .