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

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

What’s your Reaction?
+1
0
+1
0
+1
0

By root

In Unix-like computer OSes (such as Linux), root is the conventional name of the user who has all rights or permissions (to all files and programs) in all modes (single- or multi-user). Alternative names include baron in BeOS and avatar on some Unix variants. BSD often provides a toor ("root" written backward) account in addition to a root account.
Regardless of the name, the superuser always has a user ID of 0. The root user can do many things an ordinary user cannot, such as changing the ownership of files and binding to network ports numbered below 1024.

Leave a Reply

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