Я не знаю ни одного программного обеспечения, которое может сделать это из коробки.
Я даже предполагаю, что вы их не найдете, поскольку использование URL-адреса HTTP в качестве спецификации загрузки SFTP не является распространенным явлением, и даже нет прямого преобразования URL-адреса в путь SFTP.
Если у вас есть URL, как
https://www.example.com/sample1/image1.jpg
Файл, представленный с использованием SFTP, будет находиться в /sample1/usage1.jpg
только в том случае, если для учетной записи SFTP веб-сайта предусмотрена привязка. Если нет, файл может быть в пути, например /home/user/httpdocs/sample1/usage1.jpg
или любой другой.
Поэтому я считаю, что вы должны как-то это написать.
Также вы не указали, изменяется ли имя хоста в URL или является постоянным. Если это изменится, откуда вы получите учетные данные хоста? Или они тоже включены в URL?
Ниже приведен пример сценария PowerShell с использованием сборки WinSCP .NET.
Настройте $remoteRoot
соответствующим образом.
try
{
# Load WinSCP .NET assembly
Add-Type -Path "WinSCPnet.dll"
# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.Protocol = [WinSCP.Protocol]::Sftp
$sessionOptions.HostName = "example.com"
$sessionOptions.UserName = "user"
$sessionOptions.Password = "mypassword"
$sessionOptions.SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx..."
$session = New-Object WinSCP.Session
$remoteRoot = "/home/user"
try
{
# Connect
$session.Open($sessionOptions)
foreach ($line in [System.IO.File]::ReadLines("list.txt"))
{
if ($line -Match "http\://[a-z.]+(/(.*)/[a-z0-9.]+)$")
{
$remotePath = $matches[1]
$remoteDir = $matches[2]
$localDir = $remoteDir -Replace "/", "\"
if (!(Test-Path $localDir))
{
Write-Host "Creating directory $localDir"
New-Item $localDir -Type directory | Out-Null
}
Write-Host "Downloading $remotePath"
$session.GetFiles(($remoteRoot + $remotePath), ($localDir + "\")).Check()
}
else
{
Write-Host "$line does not have expected URL format"
}
}
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
exit 0
}
catch [Exception]
{
Write-Host $_.Exception.Message
exit 1
}
(Я автор WinSCP)