Как в Windows 10 заменить дубликаты файлов жесткими ссылками с помощью PowerShell

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

Хорошо, не подходит CCleaner, всегда можно найти более специализированную программу, но давайте представим другую ситуацию: вам нужно освободить на жестком диске место, но так, чтобы сами записи о дубликатах остались.

Сделать это можно, не прибегая к помощи сторонних программ, воспользовавшись встроенными средствами операционной системы, а именно PowerShell, заменив дублирующийся файлы жесткими ссылками. Если кто не в курсе, жесткая ссылка — это нечто вроде специального ярлыка, описывающий элемент файла, на который указывает эта ссылка. Кроме названия (имена Hard Link могут отличаться от файлов), внешне такая ссылка практически ничем не отличается от файла, удаление последней жесткой ссылки на файл приводит к удалению самого файла.

Для решения поставленной задачи мы предлагаем использовать готовый скрипт, написанный неким Василием Гусевым и впоследствии доработанный Вадимом Стеркиным на пару с самим автором.

Скачать его вы можете по ссылке - disk.yandex.ru/d/5Vi672Tkpfk0FA.

Откройте PowerShell, перейдите с помощью команды cd в расположение скрипта и запустите его следующей командой, передав ему в качестве аргументов пути к анализируемым папкам:

.\replacing-duplicates-hard-links.ps1 -dir1 D:\data1 -dir2 D:\data2

Если при выполнении скрипта вы получите ошибку, а так скорее всего и будет, разрешите исполнение скриптов PowerShell командой Set-ExecutionPolicy RemoteSigned -Scope Currentuser с подтверждением и повторите запуск скрипта.

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

Replacing-duplicates-hard-links

Если дубликат файла отсутствует, в консоли выводится уведомление «файл не найден». Проверить, что файл в папке действительно «превратился» в жесткую ссылку можно командой fsutil hardlink list настоящий файл, — путь к жесткой ссылке будет указан во второй строке.

Fsutil hardlink list

Примечание: в Windows 8.1 запуск скрипта приведет к удалению дубликатов в папке data1, так как командлет New-Item не поддерживается PowerShell версии 4.0

Тем, у кого-то возникнут проблемы со скриптом, можно порекомендовать Dupemerge — стороннюю консольную утилиту, служащую тем же целям, что и скрипт, но более функциональную и информативную.

Простейшая команда поиска дубликатов и замены их жесткими ссылками в PowerShell выглядит следующим образом:

./dupemerge D:/data1 D:/data2, при этом тулза выводит отчет о проделанной работе.

Dupemerge

Dupemerge: https://schinagl.priv.at/nt/dupemerge/dupemerge.html

Оцените Статью:

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

1 комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *