比较文件夹和散列文件

2022-01-30 14:44:27 标签 powershellfilehashcompare

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

什么是保存原始文件夹哈希值(在删除之前)在一个文本文件中的最好方法,也许并检查备份的完整性对该文件很久以后。

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

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

$inputDir = 'C:\path\to\dir' # 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-8 BOM;使用-Encoding utf8bom如果你想要一个;相反,在Windows PowerShell中,你总是会得到一个BOM。

注意:

Get-FileHash输出的Microsoft。PowerShell。Commands。FileHashInfo实例也有一个。 algorithm属性来命名所使用的哈希算法(默认为'SHA256'或通过-Algorithm参数指定)。

如果您希望包含此属性(其值将为所有CSV行相同),只需添加即可Algorithm to the array of properties passed to Select-Object above.

传递给的属性数组Select-Object above.

以上。

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

稍后,您可以在备份目录树中应用相同的命令,输入backuphash 。 CSV,并使用compare - object比较这两个CSV文件:

Compare-Object (Import-Csv -LiteralPath originalHashes.csv) `
               (Import-Csv -LiteralPath backupHashes.csv) `
               -Property RelativePath, Hash

注意:没有严格的操作需要涉及文件——一个或两个输出集合可以被捕获在内存中,可以直接使用在比较——就省略Export-Csv调用上面的命令,保存到一个变量($ originalHashes = Get-ChildItem…)

阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码