На PowerShell (стоит по дефолту на Win 7) это примерно так (поскреб по
сусекам и
тупо в лоб, так что лучше потестить :) ):
Юзаем два дотнетовских класса — System.IO.FileSystemWatcher и System.Net.WebClient.
Подписываемся на соотв. события ФС, из деталей события достаем имя файла и заливаем его при помощи WebClient. WebClient умный, его потом можно легко переделать для SFTP.
#
# Watch for files in $watchDir that a match a filer $watchFilter
# and upload them to FTP $ftpUrl when they are changed (modified)
#
$ftpUrl = "ftp://username:password@example.com/pub/incoming/"
$watchDir = "b:\temp"
$watchFilter = "*.txt"
function uploadFile($fullFileName)
{
$webclient = New-Object System.Net.WebClient
$fileName = [system.io.path]::GetFileName($fullFileName)
$fileUrl = $ftpUrl+$fileName
$uri = New-Object System.Uri($fileUrl)
try
{
$rc = $webclient.UploadFile($uri, $fullFileName)
}
catch [System.Net.WebException]
{
Write-Host "[ERR]: "$_
return
}
Write-Host "Uploaded $fullFileName"
}
$watcher = New-object System.IO.FileSystemWatcher $watchDir
$watcher.EnableRaisingEvents = $true
$watcher.Filter = $watchFilter
$changed = Register-ObjectEvent $watcher "Changed" -Action {
Write-Host $eventArgs.ChangeType, $eventArgs.Fullpath
uploadFile $eventArgs.Fullpath
}
while($true) {
echo "."
start-sleep -s 5
}
# EOF