А АSaturday, 17 May 2025

Аудит вільного місця на SSD


Привіт привіт.

Не зважаючи на свій SSD-накопичувач в декілька терабайт рано чи пізно приходить момент коли є потреба провести аудит вашого диску на великі файли. Я вже це робив раніше.

Тоді великі за розміром файли (перших 20-ть) я шукав так:

# By files

Get-ChildItem C:\ -recurse -Exclude "VM,Toolkit,swsetup,tmp" | Sort-Object length, lastwritetime -descending | select-object -first 20 | `

ft length, lastwritetime, fullname -wrap -auto

А папки які займають багато місця так:

# By folders

$directorySizes = Get-ChildItem -Path 'C:\' -Directory -Recurse -Exclude "VM,Toolkit,swsetup,tmp" |

    ForEach-Object {

        $directory = $_.FullName

        $size = (Get-ChildItem -Path $directory -File -Recurse | Measure-Object -Property Length -Sum).Sum

        [PsCustomObject]@{

            DirectoryPath = $directory

            SizeInBytes   = $size

        }

    } |

    Sort-Object -Property SizeInBytes -Descending |

    Select-Object -First 15 |

    Format-Table DirectoryPath, SizeInBytes -AutoSize

А сьогодні маю іншу проблему - багато розробників генераторів GenAI або процесів до них не дуже переймаються назвою SD-моделей, точніше назвою файлу моделі. Іноді це просто як pytorch_model.safetensors

Safetensors - це формат файлів, розроблений Hugging Face, який використовується для безпечного та швидкого завантаження та зберігання ваг моделей машинного навчання, особливо для нейромереж типу Stable Diffusion. Він забезпечує безпечну передачу даних, запобігаючи можливості виконання шкідливого коду, який може бути вбудований в інші формати, такі як .ckpt. 

Так от маючи Forge, Fooocus, ComfyUI поруч, та переводячи всі моделі в одну загальну папку я помітив що є чималі файли (а моделі зараз мають розмір від 6 Гб до 20 Гб) які співпадають за розміром, але не співпадають за назвою. Або навіть різниця тільки в extension: safetensors, ckpt, bin, pth, pt.

Тому я вирішив вдосконалити попередній скрипт на пошук таких дублікатів:

$directorySizes

$file_dublicates = Get-ChildItem –path D:\Models -Recurse |

 Group-Object -property Length| Where-Object { $_.count -gt 1 }|

 Select-Object –Expand Group| Get-FileHash | 

 Group-Object -property hash | Where-Object { $_.count -gt 1 }| ForEach-Object { $_.group | Select-Object Path, Hash }

$file_dublicates

$file_dublicates | Out-GridView -Title 'Выберите файлы для удаления' -OutputMode Multiple | Remove-Item –Verbose –WhatIf

З його допомогою в теці D:\Models виконується пошук файлів які тотожні за хешем, тобто є близнюками, і які потім можно вибрати для видалення за вашим вибором.

Прошу.

1 comment:

Anonymous said...

Увага - хеш великого файлу обчислюється довгенько, майте терпіння.

Post a Comment

А что вы думаете по этому поводу?

Версия на печать

Популярное