Я хочу сравнить две большие структуры папок и сравнить текущее состояние структуры папок с известным хорошим историческим состоянием, и мне нужен наиболее эффективный вариант из возможных. Рассматриваемая структура папок представляет собой «развертывание» Autodesk, представляющее собой раздутый беспорядок установщика, с объемом данных более 15 ГБ, более 15 000 файлов и более 2500 папок. И они от 1008 *, казалось бы, безобидные изменения могут сломать их. Однажды столкнулся с тем, что отсутствие файла thumbs.DB привело к сбою всей установки Revit 2018. Итак, я хочу иметь возможность копировать развертывания и сравнивать исходное и целевое объекты, чтобы убедиться, что все скопировано правильно, и сравнить текущее состояние с историческим состоянием, чтобы убедиться, что ничего не изменилось.
Сначала я подумал, что я мог бы Get-ChildItem
получить полный список всех папок и имен файлов, затем Get-FileHash
, что в качестве первого шага, а затем распределить все пути к файлам в массиве для распределения по нескольким работам, которые Get-FileHash
всех файлов, а затем суммируйте все хэши, чтобы получить один ха sh для папки. Затем его можно сравнить с ha sh для другой папки или историческим ha sh, чтобы определить, изменилось ли что-либо. Я показал, что Get-FileHash
работает как однопотоковая последовательность в примере развертывания, и это занимает разумную пару минут, поэтому многопоточность и сокращение ее в среднем в 4 раза будет вполне выполнимым. Тем не менее, сравнение двух структур папок похоже на то, что может быть уже реализовано, и гораздо быстрее, уже в Windows. Поэтому, прежде чем я go спустился в эту кроличью нору, я подумал, что лучше всего посмотреть, правильная ли это дыра.