Войти

Показать полную графическую версию : поиск уникальных файлов


Страниц : [1] 2

Peutrov
26-05-2020, 03:42
Есть папка с множеством подпапок, подподпапок и т.д. В них много файлов-дубликатов и мало уникальных файлов.
Как быстро найти только уникальные? (Сравнение по имени и размеру файла)

Total Commander прекрасно ищет дубликаты. Но уникальный файл подсветить не может.
Файлы надо только найти: удалять, перемещать нельзя.
Существует ли простое решение?
Спасибо

Iska
26-05-2020, 20:24
Существует ли простое решение? »
Конечно. Скрипт на PowerShell будет вполне универсальным решением.

Что Вы с этими файлами дальше делать будете?

Peutrov
26-05-2020, 22:42
Скрипт на PowerShell »
жаль что потом эти файлы нельзя скопировать, переместить :( не прибегая к коду
спасибо

DJ Mogarych
27-05-2020, 09:13
жаль что потом эти файлы нельзя скопировать, переместить не прибегая к коду »
Код там проще пареной репы. Вот вывод списка:

dir D:\Downloads -File -Recurse |sort name -Unique |sort length -Unique


Копирование или перемещение - это ещё всего лишь одна команда.

megaloman
27-05-2020, 14:46
DJ Mogarych, Попробовал Ваш код. В папку (пускай D:\Downloads) скопировал другую папку с подпапками и файлами в них. В этой же папке создал подпапку и скопировал туда то же самое. Один файл изменил. Похоже, приведенная команда перечисляет все файлы.

Foreigner
27-05-2020, 15:46
pwsh

((gci /data/downloads -File -Recurse | group length | group name).group | where count -eq 1).group.fullname

greg zakharov
27-05-2020, 16:56
Уникальность файла определяется его энтропией, а не размером (не говоря о названии). И приведенные выше примеры не учитывают этот нюанс. Если с расчетом уникальности не хочется заморачиваться, более или менее верным будет удаление дубликатов по хэшу.
(gci X:\Path -file -r | Get-FileHash | group Hash).Where{$_.Count -gt 1}.ForEach{$_.Group | select -exp Path -skip 1} | ri -fo

Iska
27-05-2020, 20:54
жаль что потом эти файлы нельзя скопировать, переместить не прибегая к коду »
Можно. Собранные скриптом имена файлов помещаете вместе с путями в текстовый файл, берёте Far Manager, открываете список файлов из текстового файла во временной панели и работаете с ними, как обычными ссылками на файлы — т.е., можете обычным для Far Manager'а образом копировать файлы, перемещать, удалять, просматривать, редактировать и т.п.

DJ Mogarych
27-05-2020, 21:31
Уникальность файла определяется его энтропией, а не размером (не говоря о названии). »
Это было ясно с самого начала, но ТС хотел именно размер и имя.
Расчёт хэша - вещь хорошая, но выполняться это будет весьма небыстро.

greg zakharov
27-05-2020, 22:13
DJ Mogarych, будучи нарывом на заднице ложкой дёгтя в бочке меда, хочу ещё раз указать, что уникальность не может определяться такими параметрами как размер и имя: файлы по размеру могут быть и одинаковы, но вы же не станете закладываться на детородный орган почку, дескать, их содержание также одинаково, верно? На счет имён - вообще отдельный разговор. Так что либо хэши, либо unsafe код и энтропия.
Расчёт хэша - вещь хорошая, но выполняться это будет весьма небыстро.Благодартвуйте, кэп!

Foreigner
27-05-2020, 22:56
Справедливости ради Get-FileHash берет hash содержимого файла. Возьмите его у двух одинаковых файлов с разными именами.

greg zakharov
28-05-2020, 00:24
Справедливости ради Get-FileHash берет hash содержимого файла. Возьмите его у двух одинаковых файлов с разными именами.Реплика в сторону, надо полагать?! Ежели нет, не переживайте титул кэпа переходящий трофей. Имя файла - всего лишь метка, относительно которой идет считывание данных с диска (если утрированно), в то время как содержимое файла представлено набором байтов, относительно которых и ведется расчет контрольной суммы.

Peutrov
28-05-2020, 00:34
Это было ясно с самого начала, но ТС хотел именно размер и имя.
Расчёт хэша - вещь хорошая, но выполняться это будет весьма небыстро. »
так точно. "Поверхностного" сравнения было бы достаточно. Не ожидал что не существует софта, в котором было бы быстро и легко это провернуть. Попробую обратиться к тотал коммандеру. Вероятно, существует плагин, который мог бы справиться с не особо мудрёной задачей

Foreigner
28-05-2020, 00:49
Ежели нет, не переживайте титул кэпа переходящий трофей. »

В принципе можно и по хэшу.

greg zakharov
28-05-2020, 01:11
Уникальность - то, что делает предмет универсальным. И если до вас в 100500 раз не дошла простая истина, что сама по себе постановка вопроса лишена логики и противоречит смысловой нагрузке русского языка, видимо форуму так и предстоит топтаться на месте, где львиную долю составляют вопросы вроде "как переместить файл".

DJ Mogarych
28-05-2020, 08:36
Так как Get-FileHash по умолчанию рассчитывает SHA1, можно ускорить обработку, задав ему алгоритм MD5:

Get-FileHash -Algorithm MD5

greg zakharov
28-05-2020, 09:47
DJ Mogarych, по умолчанию используется SHA256. MD5 подвержен коллизиям и не рекомендуется к использованию (неоднократно сталкивался с оным на практике). К слову, SHA256 также можно атаковать, но возможность коллизии ниже на порядок. Если исполнение сценария критично по времени, имеет смысл, как было сказано ранее, использовать unsafe код (благо в pwsh такая возможность имеется, в смысле не нужно использовать Add-Type). Да, код получится длиннее, но работать будет очень быстро.

DJ Mogarych
28-05-2020, 09:51
по умолчанию используется SHA256 »
Да, верно, перепутал.
MD5 подвержен коллизиям »
Я знаю, но в данном случае вероятность таких тонкостей стремится к нулю.

greg zakharov
28-05-2020, 09:59
Тем не менее, предосторожности ради лучше отказаться от MD5.

greg zakharov
30-05-2020, 20:03
https://i.paste.pics/ca8309eb16095bf65a4c09b496c26b6e.png




© OSzone.net 2001-2012