apakah ada yang setara dengan rsync di MS PowerShell?

14

Rsync sangat berguna, saya tidak perlu menyalin semua file dalam direktori. Hanya memperbarui file yang lebih baru.

Saya menggunakannya dengan cygwin tetapi saya pikir ada beberapa inkonsistensi, yang bukan fokus utama dari pertanyaan ini.

jadi adakah yang setara?

kirill_igum
sumber

Jawaban:

12

Meskipun tidak setara, dan bukan fitur Powershell, robocopy dapat melakukan beberapa hal yang digunakan untuk rsync.

Lihat juga /server//q/129098

RedGrittyBrick
sumber
1

Ini berfungsi untuk menyinkronkan direktori antara. Panggil fungsi "rsync". saya punya masalah izin dengan robocopy. Ini tidak memiliki masalah itu.

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
sumber