将文件夹与散列文件进行比较



关于比较两个文件夹的哈希值以获得这样的完整性,有很多问题和答案。假设我有一个文件夹,我复制到备份介质(外部驱动器,闪存,光盘),并希望删除原始的为了节省空间

保存原始文件夹哈希值(在删除之前)在文本文件中最好的方法是什么,然后再根据该文件检查备份的完整性。

请注意,如果您先删除原始,然后发现备份缺乏完整性,那么可以说,您所知道的是出了问题;未损坏的数据将会消失。


您可以创建一个包含RelativePath(相对于输入目录的完整文件路径)和Hash两列的CSV文件,并将其保存为Export-Csv:

的CSV文件。
$inputDir = 'C:pathtodir' # Note: specify a *full* path.
$prefixLen = $inputDir.Length + 1
Get-ChildItem -File -Recurse -LiteralPath $inputDir |
Get-FileHash |
Select-Object @{ 
Name='RelativePath'
Expression={ $_.Path.Substring($prefixLen) } 
}, 
Hash |
Export-Csv originalHashes.csv -NoTypeInformation -Encoding utf8

注意:在PowerShell (Core) 7+中,既不需要-NoTypeInformation也不需要-Encoding utf8,但请注意该文件将具有没有UTF-8BOM;如果需要,使用-Encoding utf8bom;相反,在Windows PowerShell中,总是

得到一个BOM。注意:

  • Get-FileHash输出的Microsoft.PowerShell.Commands.FileHashInfo实例也有一个.Algorithm属性,命名所使用的散列算法(默认为'SHA256',或通过-Algorithm参数指定)。
    如果希望包含此属性(其值对于所有CSV行都是相同的),只需将Algorithm添加到上述传递给Select-Object的属性数组中。

  • 注意哈希表(@{ ... })作为第二个属性参数传递给Select-Object,作为计算属性,从每个.Path属性值(包含完整路径)派生相对路径。

稍后可以将相同的命令应用于backup目录树,保存到backupHashes.csv,并将两个CSV文件与Compare-Object进行比较:

Compare-Object (Import-Csv -LiteralPath originalHashes.csv) `
(Import-Csv -LiteralPath backupHashes.csv) `
-Property RelativePath, Hash
注意:在操作中不需要严格地涉及文件—一个或两个输出集合可以在内存中捕获并可以直接用于比较—只需省略上面命令中的Export-Csv调用并保存到一个变量($originalHashes = Get-ChildItem ...)

相关内容

  • 没有找到相关文章

最新更新