@shledon

Как заменить старые файлы сравнивая их хэш и время создания?

Моя цель. Заменить старые данные новыми из шары используя скрипт на powershell, нужно сравнить два одинаковых файла и заменить либо в случае отличия дат либо если отличия хэш файлов.
Вытащить ХЭЩ смог с помощью
$oldfile = Get-FileHash .\old\*
$newfile = Get-FileHash .\new\*
но не смог их нормально сравнить и получить в итоге путь отличающихся файлов для последующей замены
  • Вопрос задан
  • 388 просмотров
Решения вопроса 1
@MaxKozlov Куратор тега PowerShell
Используете Compare-Object и Where-Object
$oldfile = Get-FileHash .\old\*
$newfile = Get-FileHash .\new\*
Compare-Object $oldfile $newfile -Property Hash -PassThru | 
   Where-Object { $_.SideIndicator -eq '<='  } |
   Foreach-Object { Copy-Item $_.Path  -Destination $Destination }

Не знаю что и куда вам копировать, поэтому в примере, может быть, придётся поменять условие при SideIndicator

Для рекурсивного сравнения надо сбор хешей сделать рекурсивным :)
$oldfile =  Get-ChildItem .\old\*  -Recurse | Get-FileHash
$newfile = Get-ChildItem .\new\* -Recurse | Get-FileHash
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@NortheR73
системный инженер
В общем - все уже озвучили...
Если Вы хотите определять новизну файла именно по хэшу - тут сложно что-то добавить к ответу MaxKozlov.
В зависимости от количества и размеров файлов вычисление хэшей может занять определенное время, поэтому можно сравнивать, как советовал rPman, имя, размер и дату последнего изменения файлов (по аналогии с хэшем):
$oldfile = Get-ChildItem -Path $OldPath -File -Recurse | Select Name,Length,LastWriteTime
$newfile = Get-ChildItem -Path $NewPath -File -Recurse | Select Name,Length,LastWriteTime
Compare-Object $oldfile $newfile -Property Name,Length,LastWriteTime -PassThru -IncludeEqual | 
   Where-Object { $_.SideIndicator -eq '<='  } |
   Foreach-Object { Copy-Item $_.Path  -Destination $Destination }

Ну и третий вариант - это использовать стандартные инструменты типа robocopy или xcopy
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы