existe equivalente ao rsync no MS powershell?

15

Rsync é muito útil, não preciso copiar todos os arquivos em um diretório. Ele atualiza apenas os arquivos mais recentes.

Eu o uso com o cygwin, mas acho que existem algumas inconsistências, que não são o foco principal desta questão.

então existe um equivalente?

kirill_igum
fonte

Respostas:

13

Embora não seja um equivalente exato nem um recurso do PowerShell, a robocopy pode fazer algumas das coisas para as quais o rsync é usado.

Consulte também /server//q/129098

RedGrittyBrick
fonte
1

Isso funciona para sincronizar diretórios entre. Chame a função "rsync". Eu tive problemas com permissões com robocopy. Isso não tem esses problemas.

function rsync ($source,$target) {

  $sourceFiles = Get-ChildItem -Path $source -Recurse
  $targetFiles = Get-ChildItem -Path $target -Recurse

  if ($debug -eq $true) {
    Write-Output "Source=$source, Target=$target"
    Write-Output "sourcefiles = $sourceFiles TargetFiles = $targetFiles"
  }
  <#
  1=way sync, 2=2 way sync.
  #>
  $syncMode = 1

  if ($sourceFiles -eq $null -or $targetFiles -eq $null) {
    Write-Host "Empty Directory encountered. Skipping file Copy."
  } else
  {
    $diff = Compare-Object -ReferenceObject $sourceFiles -DifferenceObject $targetFiles

    foreach ($f in $diff) {
      if ($f.SideIndicator -eq "<=") {
        $fullSourceObject = $f.InputObject.FullName
        $fullTargetObject = $f.InputObject.FullName.Replace($source,$target)

        Write-Host "Attempt to copy the following: " $fullSourceObject
        Copy-Item -Path $fullSourceObject -Destination $fullTargetObject
      }


      if ($f.SideIndicator -eq "=>" -and $syncMode -eq 2) {
        $fullSourceObject = $f.InputObject.FullName
        $fullTargetObject = $f.InputObject.FullName.Replace($target,$source)

        Write-Host "Attempt to copy the following: " $fullSourceObject
        Copy-Item -Path $fullSourceObject -Destination $fullTargetObject
      }

    }
  }
}
Ken Germann
fonte