Powershell速度:如何加快ForEach-Object MD5 /哈希检查

休斯

我正在对5亿个文件运行以下MD5检查,以检查重复项。这些脚本永远无法运行,我想知道如何加快运行速度。我怎样才能加快速度?当哈希已经存在时,我可以使用try catch循环而不是contains来引发错误吗?你们都会推荐什么?

$folder = Read-Host -Prompt 'Enter a folder path'

$hash = @{}
$lineCheck = 0

Get-ChildItem $folder -Recurse | where {! $_.PSIsContainer} | ForEach-Object {
    $lineCheck++
    Write-Host $lineCheck
    $tempMD5 = (Get-FileHash -LiteralPath $_.FullName -Algorithm MD5).Hash;

    if(! $hash.Contains($tempMD5)){
        $hash.Add($tempMD5,$_.FullName)
    }
    else{
        Remove-Item -literalPath $_.fullname;
    }
} 

如注释中所建议,您可能在与首先找到的文件长度匹配时才考虑开始对文件进行哈希处理这意味着您不会为任何唯一的文件长度调用昂贵的哈希方法。

*注意:该Write-Host命令本身非常昂贵,因此我不会显示每个迭代(Write-Host $lineCheck),而仅显示找到匹配项的情况。

$Folder = Read-Host -Prompt 'Enter a folder path'

$FilesBySize = @{}
$FilesByHash = @{}

Function MatchHash([String]$FullName) {
    $Hash = (Get-FileHash -LiteralPath $FullName -Algorithm MD5).Hash
    $Found = $FilesByHash.Contains($Hash)
    If ($Found) {$Null = $FilesByHash[$Hash].Add($FullName)}
    Else {$FilesByHash[$Hash] = [System.Collections.ArrayList]@($FullName)}
    $Found
}

Get-ChildItem $Folder -Recurse | Where-Object -Not PSIsContainer | ForEach-Object {
    $Files = $FilesBySize[$_.Length]
    If ($Files) {
        If ($Files.Count -eq 1) {$Null = MatchHash $Files[0]}
        If ($Files.Count -ge 1) {If (MatchHash $_) {Write-Host 'Found match:' $_.FullName}}
        $Null = $FilesBySize[$_.Length].Add($_.FullName)
    } Else {
        $FilesBySize[$_.Length] = [System.Collections.ArrayList]@($_.FullName)
    }
}

显示找到的重复项:

ForEach($Hash in $FilesByHash.GetEnumerator()) {
    If ($Hash.Value.Count -gt 1) {
        Write-Host 'Hash:' $Hash.Name
        ForEach ($File in $Hash.Value) {
            Write-Host 'File:' $File
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 MD5 Powershell 中获取哈希

来自分类Dev

加快文件阵列的MD5检查

来自分类Dev

加快文件阵列的MD5检查

来自分类Dev

使用Powershell将md5哈希保存到文件

来自分类Dev

如何在Laravel中将MD5哈希用于密码?

来自分类Dev

如何在R中创建列的md5哈希?

来自分类Dev

如何在Qt中创建MD5哈希?

来自分类Dev

如何小写文件中的所有MD5哈希?

来自分类Dev

如何在Qt中创建MD5哈希?

来自分类Dev

如何检查iso的MD5 / SHA1?

来自分类Dev

MD5哈希转换

来自分类Dev

生成MD5哈希

来自分类Dev

PHP MD5(MD5)哈希

来自分类Dev

PHP MD5(MD5)哈希

来自分类Dev

如何在PostMan中的预请求脚本中计算md5哈希?

来自分类Dev

如何在Java / Scala中将MD5哈希安全地转换为存储桶?

来自分类Dev

如何从MD5转换为任何其他哈希?

来自分类Dev

如何在Angular 2打字稿中生成md5哈希?

来自分类Dev

如何直接在终端中获取字符串的MD5哈希?

来自分类Dev

如何在Openrefine中基于值的MD5哈希创建UUID

来自分类Dev

如何在长生不老药中的地图上创建“哈希”或“ md5”?

来自分类Dev

如何直接在终端中获取字符串的MD5哈希?

来自分类Dev

如何通过Arch Linux命令行创建md5哈希?

来自分类Dev

如何在外壳中通过管道传递md5哈希结果

来自分类Dev

如何使用MD5哈希值比较电子邮件

来自分类Dev

给定md5哈希值时如何查找特定文件

来自分类Dev

如何在Python 2.6的MD5哈希中使用字节数组?

来自分类Dev

如何在Angular 2打字稿中生成md5哈希?

来自分类Dev

MD5散列如何不会用完哈希值?