В настоящее время я использую Compare-Object
для сравнения содержимого двух каталогов.
Каталоги содержат смесь подпапок, файлов PDF и некоторых текстовых файлов.Папки могут содержать более 20 000+ файлов в 50 000+ папок, всего 1-2 ГБ.
Compare-Object
завершается примерно через 4 мс30 для сравнения этого размера.Я попытался использовать этот метод хеш-таблицы , чтобы ускорить его, но он дает много ложных срабатываний из-за наличия там дублирующихся имен папок (я думаю?).
Есть ли еще какие-то другиеварианты, чтобы ускорить эту вещь?
Param(
[Parameter(Mandatory=$true)][string]$dir1,
[Parameter(Mandatory=$true)][string]$dir2
)
$sw = [Diagnostics.Stopwatch]::StartNew()
# Directories
$sourcedir = Get-ChildItem -Path $dir1 -Recurse
$destinationdir = Get-ChildItem -Path $dir2 -Recurse
# Differences
$differences = Compare-Object -ReferenceObject $sourcedir -DifferenceObject $destinationdir
$differences
$output = $differences |
select @{l='File/Folder';e={$_.InputObject}},
@{l='Indicator';e={$_.SideIndicator}},
@{l='Path';e={$_.InputObject.FullName}}
$output
$sw.Stop()
"Found " + $differences.Count + " missing objects in " + $sw.Elapsed