我遇到了 Server 2012 中的数据重复数据删除损坏了元数据的情况 - 我该如何从旧存储库复制这些文件?

我遇到了 Server 2012 中的数据重复数据删除损坏了元数据的情况 - 我该如何从旧存储库复制这些文件?

我有两个驱动器 - 驱动器 D: 和驱动器 F:。这两个驱动器都是本地连接到 Server 2012 计算机的驱动器。驱动器 F 是旧数据存储,由于新驱动器 (D) 较大,因此将其迁移到新驱动器 (D)。

在将文件从 F 同步到 D 之前,已在驱动器 D 上启用了数据重复删除。

Robocopy /MIR 损坏了驱动器 F 上的重复数据删除存储,需要我从旧的 D 驱动器重新同步文件。(具体来说,是任何具有 APL 属性(Archive、ReparsePoint、SparseFile)的文件)。

我遇到的问题是,自切换以来,F 上的某些文件已被写入 - 我试图编写一个脚本来定位这些文件并将它们复制过去,但我想要一个更好的方法来解决这个问题!

目前我有一个脚本,可以搜索具有“ReparsePoint”属性的文件并将其写入文本文件

function Recurse($path) {

  $fc = new-object -com scripting.filesystemobject
  $folder = $fc.getfolder($path)

  foreach ($i in $folder.files) { $i | select Path }

  foreach ($i in $folder.subfolders) {
    $i | select Path        
    if ( (get-item $i.path).Attributes.ToString().Contains("ReparsePoint") -
eq $false) {        
        Recurse($i.path)
    }
  }
}

$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
$outputlist = Recurse($scriptPath) | Out-File -Filepath .\filelist.txt 

然后我会根据该列表从源存储库复制。理想情况下,我希望它是一个单一脚本!

有没有脚本专家愿意帮忙?

干杯

答案1

下面的效果很好;

Get-ChildItem -Recurse -File | 
Where-Object { $_.Attributes -match "ReparsePoint" } |
Foreach-Object {
    $currentFileName = $_.FullName
    $oldFileName = $currentFileName.replace("D:\", "F:\")
    if (Test-Path $oldFileName) {
        Copy-Item $oldFileName $currentFileName -Force
        Write-Host "Copied $oldFileName to $currentFileName"
    }        
}

相关内容