Categories
DIY

Powershell Magic

Уборка Авгиевых конюшен – занятие интересное.  Особенно увлекательно, если это – историческое наследие файлов, которые копились годами.

As pretty as a picture hanging from a fixture
Strong like a family, strong as I wanna be
Bright as day, as light as play
As hard as nails, as grand as a whale

All I wanna be oh, all I wanna be, oh
All I wanna be is everything
Everything at once

Lenka Everything at Once

Уборка Авгиевых конюшен – занятие интересное.  Особенно увлекательно, если это – историческое наследие файлов, которые копились годами.

Удивительный факт – все попытки разобрать это руками давали исключительно временный эффект. Наличие множества компьютеров, многих облачных хранилищ, и тому подобного приводит к накопления множества фотографий просто с фантастической скоростью.

Чтобы хоть немного упростить и автоматизировать задачу приняли решение убрать все дубликаты из существующей библиотеки с помощью доступных механизмов Powershell. Очевидно, что в названия можно было и не попасть, то вариант с проверкой хэша выглядел довольно привлекательным.

PS> Get-ChildItem *.* -Recurse | Get-FileHash |group -Property hash | ? {$_.count -gt 1} | % {$_.group | select -skip 1}

 Algorithm       Hash                                                                   Path

———       —-                                                                   —-

SHA256          D97AB86A4A842B981998D2EE3D83CC390F40505CAF684BDFAB79B95038E1DD45       D:\animals002 – Copy (3)…

SHA256          D97AB86A4A842B981998D2EE3D83CC390F40505CAF684BDFAB79B95038E1DD45       D:\animals002 – Copy.jpg

SHA256          D97AB86A4A842B981998D2EE3D83CC390F40505CAF684BDFAB79B95038E1DD45       D:\animals002.jpg

В силу того, что в подобном варианте не очень удобно оперировать для дальнейших махинаций с данными – сильно проще все это заносить в переменную и дальше уже оперировать с этим.

PS> $dup = ls *.* -recurse | get-filehash | group -property hash | where { $_.count -gt 1 } | % { $_.

group | select -skip 1 }

PS> $dup.count

11433

В некоторых случаях может случиться довольно неприятная ситуация. Например, если в названии файла будет содержаться “[]”. В этом случае тогда придется использовать параметр -LitheralPath. Он позволит удалить, но не переименовать файл. Для переименования придется пользоваться более темной магией.

 PS> Remove-Item -LiteralPath $dup.path

В некоторых случаях это может помочь.

By khabradmin

Зачем это здесь? Почему это здесь? Кто это читает? Автор этого бложека задает себе те же самые вопросы. Ответ прост: потому что. В силу того, что khabradmin причастен к IT, домен пародирует habr.ru. В силу того, что автор много фотографирует, контент совершенно иного свойства. Суть писанины в том, что хочется писать. А вот писать в соц. сетях утомительно и глупо, поэтому комментариев тут нет. Приятного чтения, если получится

Leave a Reply

Your email address will not be published. Required fields are marked *