поиск уникальных файлов
Есть папка с множеством подпапок, подподпапок и т.д. В них много файлов-дубликатов и мало уникальных файлов.
Как быстро найти только уникальные? (Сравнение по имени и размеру файла)
Total Commander прекрасно ищет дубликаты. Но уникальный файл подсветить не может.
Файлы надо только найти: удалять, перемещать нельзя.
Существует ли простое решение?
Спасибо
|
Цитата:
Цитата Peutrov
Существует ли простое решение? »
|
Конечно. Скрипт на PowerShell будет вполне универсальным решением.
Что Вы с этими файлами дальше делать будете?
|
жаль что потом эти файлы нельзя скопировать, переместить :( не прибегая к коду
спасибо
|
DJ Mogarych |
27-05-2020 09:13 2922909 |
Цитата:
Цитата Peutrov
жаль что потом эти файлы нельзя скопировать, переместить не прибегая к коду »
|
Код там проще пареной репы. Вот вывод списка:
Код:
dir D:\Downloads -File -Recurse |sort name -Unique |sort length -Unique
Копирование или перемещение - это ещё всего лишь одна команда.
|
DJ Mogarych, Попробовал Ваш код. В папку (пускай D:\Downloads) скопировал другую папку с подпапками и файлами в них. В этой же папке создал подпапку и скопировал туда то же самое. Один файл изменил. Похоже, приведенная команда перечисляет все файлы.
|
pwsh
Код:
((gci /data/downloads -File -Recurse | group length | group name).group | where count -eq 1).group.fullname
|
greg zakharov |
27-05-2020 16:56 2922982 |
Уникальность файла определяется его энтропией, а не размером (не говоря о названии). И приведенные выше примеры не учитывают этот нюанс. Если с расчетом уникальности не хочется заморачиваться, более или менее верным будет удаление дубликатов по хэшу.
Код:
(gci X:\Path -file -r | Get-FileHash | group Hash).Where{$_.Count -gt 1}.ForEach{$_.Group | select -exp Path -skip 1} | ri -fo
|
Цитата:
Цитата Peutrov
жаль что потом эти файлы нельзя скопировать, переместить не прибегая к коду »
|
Можно. Собранные скриптом имена файлов помещаете вместе с путями в текстовый файл, берёте Far Manager, открываете список файлов из текстового файла во временной панели и работаете с ними, как обычными ссылками на файлы — т.е., можете обычным для Far Manager'а образом копировать файлы, перемещать, удалять, просматривать, редактировать и т.п.
|
DJ Mogarych |
27-05-2020 21:31 2923016 |
Цитата:
Цитата greg zakharov
Уникальность файла определяется его энтропией, а не размером (не говоря о названии). »
|
Это было ясно с самого начала, но ТС хотел именно размер и имя.
Расчёт хэша - вещь хорошая, но выполняться это будет весьма небыстро.
|
greg zakharov |
27-05-2020 22:13 2923025 |
DJ Mogarych, будучи нарывом на заднице ложкой дёгтя в бочке меда, хочу ещё раз указать, что уникальность не может определяться такими параметрами как размер и имя: файлы по размеру могут быть и одинаковы, но вы же не станете закладываться на детородный орган почку, дескать, их содержание также одинаково, верно? На счет имён - вообще отдельный разговор. Так что либо хэши, либо unsafe код и энтропия.
Цитата:
Цитата DJ Mogarych
Расчёт хэша - вещь хорошая, но выполняться это будет весьма небыстро.
|
Благодартвуйте, кэп!
|
Справедливости ради Get-FileHash берет hash содержимого файла. Возьмите его у двух одинаковых файлов с разными именами.
|
greg zakharov |
28-05-2020 00:24 2923033 |
Цитата:
Цитата Foreigner
Справедливости ради Get-FileHash берет hash содержимого файла. Возьмите его у двух одинаковых файлов с разными именами.
|
Реплика в сторону, надо полагать?! Ежели нет, не переживайте титул кэпа переходящий трофей. Имя файла - всего лишь метка, относительно которой идет считывание данных с диска (если утрированно), в то время как содержимое файла представлено набором байтов, относительно которых и ведется расчет контрольной суммы.
|
Цитата:
Цитата DJ Mogarych
Это было ясно с самого начала, но ТС хотел именно размер и имя.
Расчёт хэша - вещь хорошая, но выполняться это будет весьма небыстро. »
|
так точно. "Поверхностного" сравнения было бы достаточно. Не ожидал что не существует софта, в котором было бы быстро и легко это провернуть. Попробую обратиться к тотал коммандеру. Вероятно, существует плагин, который мог бы справиться с не особо мудрёной задачей
|
Цитата:
Цитата greg zakharov
Ежели нет, не переживайте титул кэпа переходящий трофей. »
|
В принципе можно и по хэшу.
|
greg zakharov |
28-05-2020 01:11 2923037 |
Уникальность - то, что делает предмет универсальным. И если до вас в 100500 раз не дошла простая истина, что сама по себе постановка вопроса лишена логики и противоречит смысловой нагрузке русского языка, видимо форуму так и предстоит топтаться на месте, где львиную долю составляют вопросы вроде "как переместить файл".
|
DJ Mogarych |
28-05-2020 08:36 2923045 |
Так как Get-FileHash по умолчанию рассчитывает SHA1, можно ускорить обработку, задав ему алгоритм MD5:
Код:
Get-FileHash -Algorithm MD5
|
greg zakharov |
28-05-2020 09:47 2923052 |
DJ Mogarych, по умолчанию используется SHA256. MD5 подвержен коллизиям и не рекомендуется к использованию (неоднократно сталкивался с оным на практике). К слову, SHA256 также можно атаковать, но возможность коллизии ниже на порядок. Если исполнение сценария критично по времени, имеет смысл, как было сказано ранее, использовать unsafe код (благо в pwsh такая возможность имеется, в смысле не нужно использовать Add-Type). Да, код получится длиннее, но работать будет очень быстро.
|
DJ Mogarych |
28-05-2020 09:51 2923053 |
Цитата:
Цитата greg zakharov
по умолчанию используется SHA256 »
|
Да, верно, перепутал.
Цитата:
Цитата greg zakharov
MD5 подвержен коллизиям »
|
Я знаю, но в данном случае вероятность таких тонкостей стремится к нулю.
|
greg zakharov |
28-05-2020 09:59 2923054 |
Тем не менее, предосторожности ради лучше отказаться от MD5.
|
greg zakharov |
30-05-2020 20:03 2923338 |
|
Вложений: 1
с символическими ссылками тоже возможны коллизии
|
greg zakharov |
30-05-2020 22:33 2923349 |
Если dummy.txt ссылается на dummy.exe, понятное дело хэши совпадут (причем не только SHA-256, можно браться за любой алгоритм, хоть даже KECCAK), так как обрабатываться будет не ссылка как таковая, а конечный объект ФС, - это не коллизия. Чтобы получить хэш самой ссылки, вам придется обратиться к потокам.
|
DJ Mogarych |
31-05-2020 15:58 2923428 |
Ещё раз: в данном случае это несущественно, потому что, помимо хэша, сравнение идёт и по именам файлов, и по их размеру. В вашем примере файлы неодинаковы по всем параметрам, кроме хэша.
|
greg zakharov |
31-05-2020 17:20 2923448 |
Цитата:
Цитата DJ Mogarych
это несущественно, потому что, помимо хэша, сравнение идёт и по именам файлов
|
Еще раз перечитайте название темы, также перечитайте мои прежние сообщения, дабы уяснить что имя файла - в грубом округлении, - метка для идентификации последовательности байтов, также как и количество байтов не является уникальной величиной. Вы прямо как Иринушка из рассказа Пантелеева "Буква 'ты'".
|
DJ Mogarych |
31-05-2020 20:14 2923484 |
Также и вы уясните, что в данном случае речь идёт об одновременном сравнении двух или трёх параметров, которые, не являясь уникальными по отдельности, вместе дают достаточную точность.
|
greg zakharov |
31-05-2020 20:37 2923490 |
DJ Mogarych, популярно, на пальцах. Допустим, есть три файла с названием dummy с одинаковым размером. В вашем понимании файлы являются просто дубликатами, однако, заглянув в содержимое, вы вдруг обнаруживаете различный порядок байтов. Потенциально хэши (если речь о SHA256) будут различны и потому такие файлы можно считать уникальными, они не будут удалены. А теперь представьте кучу разных файлов с разными именами, но одинаковым содержимом разбросанные по папкам. Будут ли они уникальны? Ответ - нет. Почему? Уникальностью называют содержимое, а не внешние факторы. Вы же не станете утверждать, что каждый человек уникален по-своему лишь потому, что он или она - человек?! Говоря об уникальности, вы разумеете содержание.
Удачи вам в ваших заблуждениях.
|
Время: 18:13.
© OSzone.net 2001-