Чому збіг за назвою й розміром знаходить не ті файли
Збіг за назвою помиляється в обидва боки. Те саме фото, збережене двічі, стає IMG_4021.jpg і IMG_4021 (1).jpg — різні назви, однакові байти, — тоді як два цілком непов'язані документи обидва можуть зватися invoice.pdf. Додайте розмір — і хибних збігів стане менше, але вони не зникнуть: два різні JPEG з одного фотоапарата часто лягають у кілька байтів один від одного, а безліч дрібних конфігураційних файлів мають однаковий розмір просто збігом.
Напрямок, який справді важливий для безпеки, — це хибний позитив: інструмент, що називає дублікатами файли, які лише схожі, колись видалить щось незамінне. Через це «пошук схожих зображень» заслуговує підозри всюди, де він автоматичний: для ручного розбору фототеки він справді зручний, але серія з десяти майже однакових кадрів — це десять різних фотографій, а не дев'ять дублікатів, і жоден алгоритм не знає, у якому кадрі відкриті очі.
Єдине визначення, що тримає удар, — побайтова тотожність. Два файли — дублікати, якщо їхній вміст однаковий, незалежно від назви, теки, мітки часу чи розширення. Це питання, на яке хеш відповідає, і відповідає щоразу однаково.
Як працює хешування і чому воно швидке
Криптографічний хеш стискає будь-який файл у відбиток фіксованої довжини — 64 шістнадцяткові символи для SHA-256. Однаковий вміст завжди дає однаковий відбиток, а два різні файли практично ніколи не збігаються. Порівняння відбитків — надійна заміна порівнянню цілих файлів, і вона дозволяє порівнювати тисячі файлів між собою, а не попарно.
Хешувати все означало б прочитати кожен байт на диску, тож грамотна реалізація працює етапами. Спершу вона групує файли за точним розміром — файли різного розміру не можуть бути однаковими, і цей крок сам прибирає переважну більшість кандидатів, не прочитавши ані байта вмісту. Потім хешує лише невеликий префікс файлів, що лишилися в групах із кількома файлами. Повний SHA-256 отримують лише ті, хто пережив цей раунд. На типовому диску етап повного читання в результаті торкається малої частини даних.
Ця етапність пояснює, яким має бути відчуття від скану. Перший прохід кількох сотень тисяч файлів — переважно робота з метаданими, і він закінчується за хвилини; повільна частина — фінальне хешування великих відео, які справді мають однаковий розмір. Якщо інструмент годинами притискає диск, заявляючи порівняння за вмістом, — він, швидше за все, хешує все підряд.
Робимо вручну через PowerShell
Для адресної перевірки не потрібна жодна програма. Цей однорядник групує файли за довжиною, відкидає унікальні розміри, хешує решту за SHA-256 і друкує лише групи, де один хеш ділять кілька файлів. Наведіть його на конкретну теку — цілий диск теж працюватиме, але займе час.
- Get-ChildItem -Path 'C:\Users\You\Pictures' -Recurse -File | Group-Object Length | Where-Object { $_.Count -gt 1 } | ForEach-Object { $_.Group } | Get-FileHash -Algorithm SHA256 | Group-Object Hash | Where-Object { $_.Count -gt 1 } | ForEach-Object { $_.Group.Path }
- Додайте -Filter '*.jpg' до Get-ChildItem, щоб обмежитися одним типом файлів
- Додайте | Out-File C:\Temp\dupes.txt наприкінці, щоб зберегти список для перегляду
- Запускайте в Windows Terminal або PowerShell; для власних тек права адміністратора не потрібні
- Використовуйте Get-FileHash -Algorithm SHA1, якщо хешуєте величезну відеотеку й потрібна швидкість
Прочитайте вивід, перш ніж щось видаляти
Команда вище навмисно друкує шляхи і нічого не видаляє. Це і є вся модель безпеки: згенеруйте список, прочитайте його, потім дійте. Відсортуйте вивід за текою — і закономірність зазвичай видно одразу: тека імпорту з камери, продубльована в датовану резервну теку; проєкт, експортований двічі; музична бібліотека, що існує і в «Музиці», і в копії зі старого зовнішнього диска, яку колись перенесли на C:.
Коли вже видаляєте — видаляйте в Кошик, а не назавжди, і малими партіями з паузами на звичайну роботу між ними. Типовий режим відмови при чищенні дублікатів — це ніколи один неправильний файл; це впевнена масова вибірка через теки, зв'язок яких ви не зрозуміли. Кошик у ланцюжку перетворює дорогу помилку на незручність.
Де дублікати накопичуються насправді
Справжні дублікати концентруються в кількох передбачуваних місцях, і сканувати лише їх — і швидше, і значно безпечніше, ніж сканувати C: цілком. «Завантаження» — чемпіон: той самий інсталятор або PDF, стягнутий тричі, кожен раз із номерним суфіксом. Фототеки — на другому місці, зазвичай через подвійний імпорт із телефона або карту, скопійовану до й після перейменування.
- «Завантаження» — повторні завантаження із суфіксами (1), (2)
- «Зображення» та теки імпорту з телефона — імпорт, запущений більше одного разу
- Хмарні теки — конфліктні копії OneDrive і Dropbox із дописаним ім'ям пристрою
- «Робочий стіл» і теки «старий робочий стіл» після перевстановлення Windows
- Теки медіа месенджерів — те саме зображення, збережене кількома чатами
- Теки експорту проєктів — рендери й збірки, експортовані раз у раз
- Старий зовнішній диск, скопійований цілком у теку на C:
Що ніколи не можна дедуплікувати
Дубльований вміст у встановлених програмах — це норма, і зроблено так навмисно. Багато програм свідомо кладуть ту саму бібліотеку рантайму в кілька тек, щоб кожна вантажила версію, з якою її тестували; видалення однієї копії лише тому, що вона збігається з іншою, — це спосіб отримати програму, яка чудово запускається й падає на конкретній функції за місяці. Та сама логіка стосується ігрових пакунків ассетів і тек розробки, де однакові залежності живуть у багатьох підтеках проєктів.
Сама Windows — найгостріший край цієї теми. C:\Windows\WinSxS повна файлів, які виглядають продубльованими, але насправді є жорсткими посиланнями на ті самі дані на диску, тож наївний сканер звітує гігабайти «дублікатів», які при видаленні не звільняють нічого, а обслуговування ламають. Обмежуйте будь-який пошук дублікатів власними теками з даними, а інструмент, що пропонує сканувати системні теки, сприймайте як підставу змінити інструмент.
- C:\Windows і все під нею, WinSxS понад усе
- C:\Program Files і C:\Program Files (x86)
- %APPDATA% і %LOCALAPPDATA% — стан програм і профілі
- C:\ProgramData — ліцензії й бази програм
- Теки встановлених ігор і каталоги вмісту лаунчерів
- Теки розробки: node_modules, vendor, віртуальні середовища, артефакти збірки
- Будь-що на диску, де ви не єдиний користувач
Вибір копії, що лишиться, і пастки
Коли група підтверджена як тотожна, копією, що лишиться, має бути та, яку ви шукали б першою, — зазвичай початкова тека, а не резервна копія, не копія з «Завантажень» і не та, що на «Робочому столі». Давайте перевагу шляху з найкоротшою й найрозумнішою назвою. Якщо одна копія лежить у синхронізованій хмарній теці, а друга ні — тримайте хмарну, лише якщо ця тека справді є вашим робочим місцем; інакше ви віддаєте єдину копію службі, чию синхронізацію колись можете скинути.
Три пастки варто назвати. Файли з жорсткими посиланнями виглядають як різні шляхи, що ділять ті самі дані, тож видалення одного не звільняє нічого, а другий далі працює — безшкідливо, але збиває з пантелику, коли обіцяна економія так і не настає. Файли-заглушки під «Файлами за запитом» OneDrive можуть узагалі не бути локальними, і їх хешування змушує завантажити всю теку. А файли в теці, якою керує щось інше — резервний набір, репозиторій, ігрова бібліотека, — є дублікатами лише з погляду файлової системи; програма, якій вони належать, очікує обидва.
Для повторюваної версії цього робочого процесу пошук дублікатів у Kleaner PRO порівнює за SHA-256, а не за назвою, за замовчуванням виключає системні та програмні теки, групує збіги з повними шляхами й дозволяє лишити обрану вами копію, перш ніж щось буде видалено. PowerShell-шлях вище робить ту саму роботу для однієї теки — і це правильний інструмент, коли перевірити хочеться одне місце.
Питання та відповіді
Чи безпечно видаляти дублікати файлів автоматично?
Не в системних та програмних теках, де однакові файли часто навмисні або є жорсткими посиланнями. У власних документах, фото і завантаженнях це безпечно, за умови що інструмент порівнював за хешем вмісту, а видалення йде в Кошик.
Чи можуть два різні файли мати однаковий хеш SHA-256?
У будь-якому практичному сенсі — ні: жодного збігу SHA-256 досі не знайдено. Саме тому для дедуплікації використовують хешування, а не порівняння назв, розмірів чи міток часу.
Чому видалення дублікатів звільняє менше місця, ніж обіцяли?
Зазвичай через жорсткі посилання: кілька шляхів вказують на одну копію даних, тож усунення одного шляху не звільняє нічого. Файли-заглушки хмарних сховищ також можуть враховуватися за повним розміром, хоча локально майже нічого не займають.
Схожі фото — це те саме, що дублікати?
Ні. Порівняння за схожістю дивиться на вигляд, тож серія майже однакових кадрів виглядає дублікатами, будучи десятьма різними фотографіями. Використовуйте його для ручного перегляду, ніколи — для масового видалення.
Перевірте склад ліцензії до покупки.
Разовий 30-хвилинний тест охоплює базові функції. Інструменти з позначкою PRO залишаються заблокованими до активації платної ліцензії.
Читайте також
Написати нам: [email protected]