比较2台服务器之间的文件大小(Unix和Windows)

时间:2015-07-24 10:22:44

标签: unix batch-file ssh

我需要编写Windows批处理文件来解决以下问题。

我需要确保文件从其原始服务器(Unix)完全传输到目标服务器(Windows)。

我正在尝试比较两个服务器之间的文件大小,解决方案需要在Windows批处理文件中(我在使用DOS批处理文件中的SSH连接到远程Unix服务器时遇到问题)

1 个答案:

答案 0 :(得分:0)

从您可以使用SSH的事实来看,我假设您还拥有SFTP访问权限。

您可以使用WinSCP .NET assembly使用以下PowerShell脚本。

param (
    $sessionUrl = "sftp://user:mypassword;fingerprint=ssh-rsa-xxxxxxxxx...=@example.com/",
    $localPath = "C:\path\file.dat",
    $remotePath = "/path/file.dat"
)

$localSize = (Get-Item $localPath).Length
Write-Host "$localPath has $localSize bytes"

# Load WinSCP .NET assembly
Add-Type -Path (Join-Path $PSScriptRoot "WinSCPnet.dll")

# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.ParseUrl($sessionUrl)

$session = New-Object WinSCP.Session

# Connect
$session.Open($sessionOptions)

$remoteSize = $session.GetFileInfo($remotePath).Length
$session.Dispose()

Write-Host "$remotePath has $remoteSize bytes"

# Compare cheksums
if ($localSize -eq $remoteSize)
{
    Write-Host "Match"
    $result = 0
}
else
{
    Write-Host "Does NOT match"
    $result = 1
}

exit $result

甚至更好,比较文件校验和,而不仅仅是大小,如果您的服务器支持,请参阅: Verify checksum of a remote file against a local file over SFTP/FTP protocol

(我是WinSCP的作者)