Gibt es ein Äquivalent zu rsync in MS Powershell?

15

Rsync ist sehr nützlich, ich muss nicht alle Dateien in ein Verzeichnis kopieren. Es werden nur die neueren Dateien aktualisiert.

Ich benutze es mit Cygwin, aber ich denke, es gibt einige Inkonsistenzen, die nicht im Mittelpunkt dieser Frage stehen.

Gibt es also ein Äquivalent?

kirill_igum
quelle

Antworten:

1

Dies funktioniert, um Verzeichnisse zwischen zu synchronisieren. Rufen Sie die Funktion "rsync" auf. Ich hatte Berechtigungsprobleme mit Robocopy. Dies hat diese Probleme nicht.

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
quelle