This is an old revision of the document!
Deleting remote files after successful remote to local synchronization
For background, see article How do I create script that synchronizes files and deletes synchronized files from source afterward?
If you do not have your favourite language, use PowerShell:
try { # Load WinSCP .NET assembly [Reflection.Assembly]::LoadFrom("WinSCPnet.dll") | Out-Null # 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:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx" $session = New-Object WinSCP.Session try { # Connect $session.Open($sessionOptions) $localPath = "C:\backup\" $remotePath = "/home/user/data/" # Synchronize files to local directory, collect results $synchronizationResult = $session.SynchronizeDirectories( [WinSCP.SynchronizationMode]::Local, $localPath, $remotePath, $False) # Deliberately not calling $synchronizationResult.Check # as that would abort our script on any error. # We will find any error in the loop below # (note that $synchronizationResult.Downloads is the only operation # collection of SynchronizationResult that can contain any items, # as we are not removing nor uploading anything) # Iterate over every download foreach ($download in $synchronizationResult.Downloads) { # Success or error? if ($download.Error -eq $Null) { Write-Host ("Download of {0} succeeded, removing from source" -f $download.FileName) # Download succeeded, remove file from source $removalResult = $session.RemoveFiles($session.EscapeFileMask($download.FileName)) if ($removalResult.IsSuccess) { Write-Host ("Removing of file {0} succeeded" -f $download.FileName) } else { Write-Host ("Removing of file {0} failed" -f $download.FileName) } } else { Write-Host ("Download of {0} failed: {1}" -f $download.FileName, $download.Error.Message) } } } finally { # Disconnect, clean up $session.Dispose() } exit 0 } catch [Exception] { Write-Host $_.Exception.Message exit 1 }
Advertisement