¿hay equivalente de rsync en MS powershell?

14

Rsync es muy útil, no tengo que copiar todos los archivos en un directorio. Actualiza solo los archivos más nuevos.

Lo uso con cygwin pero creo que hay algunas inconsistencias, que no son el foco principal de esta pregunta.

Entonces, ¿hay un equivalente?

kirill_igum
fuente

Respuestas:

12

Aunque no es un equivalente exacto, ni una función de Powershell, la robocopy puede hacer algunas de las cosas para las que se usa rsync.

Ver también /server//q/129098

RedGrittyBrick
fuente
1

Esto funciona para sincronizar directorios entre. Llame a la función "rsync". Tuve problemas de permisos con robocopy. Esto no tiene esos 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
fuente