Пометить на панелях файлы с одинаковым содержимым независимо от имён

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
User avatar
Konstantin
Posts: 234
Joined: Wed 14 Jun, 2006 19:29
Location: Санкт-Петербург
Has thanked: 109 times
Been thanked: 5 times

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by Konstantin »

Latest post of the previous page:

buniak_a_h,
Prutkov wrote: Sun 14 May, 2023 21:15 А могли бы Вы сделать скрипт, который ... выделял бы дубликаты на временной панели ..., но ... не только одноимённые, а и переименованные?
Наконец-то я разобрался в чём суть просьбы и присоединяюсь к ней.
«Раньше я думал, что чудаки это те, кто делают странные вещи. Теперь я знаю, что это те, кто называют других странными.» (П. Маккартни)
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by buniak_a_h »

Prutkov, Konstantin! Сделал я простейший скрип (во вложении). Если его запускать как lua-процедуру (lua:@DblFind.lua), то обрабатывает пассивную панель; если из меню плагинов - активную. Сделано 2 арианта: первый - «в лоб» (просто перебором без оптимизации; предполагается, что перед запуском на панели нет отмеченных файлов!!!); второй - с некоторой оптимизацией (этому пофик на отмеченные файлы). Вроде как результат одинаковый, но второй в 2.5 раза быстрее. Проверка в этом деле - самое сложное.
Обратите внимание, насколько результат неинформативен: какие файлы являются близнецами - отсюда не вычленить. При этом мне казалось, что основная Ваша задача - из всех близнецов оставить один (хотя у меня есть скрипт, заменяющий реальные совпадающие файлы на жесткие ссылки. Т.е. файл вроде есть, но места не занимает и некоторыми прогами (в том числе ФАРом) все клоны редактируются одновременно. Бывает удобно.
Собственно файл:
DblFind.lua
(3.39 KiB) Downloaded 36 times
User avatar
Konstantin
Posts: 234
Joined: Wed 14 Jun, 2006 19:29
Location: Санкт-Петербург
Has thanked: 109 times
Been thanked: 5 times

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by Konstantin »

buniak_a_h,

Спасибо большое!

Второй вариант, несомненно, предпочтителен. В ветке из 277 файлов оба варианта верно обнаружили 4 дубликата. Первый — за 1705 единиц времени, а второй — за 52. Т.е. не в 2,5 раза быстрее, а более чем в 30 раз!
buniak_a_h wrote: Wed 17 May, 2023 15:00 у меня есть скрипт, заменяющий реальные совпадающие файлы на жесткие ссылки
Очень даже прошу Вас опубликовать его (в крайнем случае передать через личку). Он мне весьма пригодится. Не понимаю даже как я раньше сам до такого не дотумкал.
«Раньше я думал, что чудаки это те, кто делают странные вещи. Теперь я знаю, что это те, кто называют других странными.» (П. Маккартни)
Prutkov
Posts: 44
Joined: Sat 08 Apr, 2023 04:58
Has thanked: 33 times
Been thanked: 2 times

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by Prutkov »

buniak_a_h, Примите, пожалуйста, благодарность за DblFind.lua также и от меня.

Для меня второй вариант тоже лучше. И не только потому, что он намного-намного быстрее первого (по времени в двух бранчах: 77740 к 8962 и 1827514 к 84090). А ещё и потому, что он, в отличие от первого: a) находит в том числе и дубли 0-размера; б) не спотыкается на файлах, имена которых начинаются с тильды ~.

Но самое главное — это то, что скрипт обнаружил дубли, которые при ручном поиске я и коллеги просто не заметили. Причём, скрипт очень быстро их обнаружил. И ложно обнаруженных не было.
buniak_a_h wrote: Mon 15 May, 2023 09:06 просто отметить неуникальные фалы малополезно. Надо группировать
Вот теперь в этом вопросе я с Вами и вовсе полностью согласен — сортировка обнаруженных дублей по родственным группам будет чрезвычайно полезной.
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by HaRT »

Prutkov wrote: Wed 17 May, 2023 18:44 сортировка обнаруженных дублей по родственным группам будет чрезвычайно полезной
А что, у вас прямо так много групп дублирующихся файлов одинакового размера? (Т.е. внутри группы одинаковое содержимое, а между группами одинаковый только размер.) Если немного, то можно обойтись и сортировкой по размеру.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Prutkov
Posts: 44
Joined: Sat 08 Apr, 2023 04:58
Has thanked: 33 times
Been thanked: 2 times

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by Prutkov »

HaRT, Благодарю Вас за совет. Сейчас попробовал — и действительно, сортировка по размеру подходит. Даже и в том случае, когда групп многовато.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by buniak_a_h »

HaRT wrote: Wed 17 May, 2023 18:49 можно обойтись и сортировкой по размеру
Собственно, оптимизация в этом и заключается, что элементы сначала сортируются по размеру, а только потом равнообъёмные сравниваются. Просто я подумал, что раз это не было сделано сразу, значит есть резон сортировать как-то по-другому…
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by buniak_a_h »

Prutkov wrote: Wed 17 May, 2023 18:44 ложно обнаруженных не было
В моей практике был случай, когда новая версия ехе-шника совпадала со старой по размеру и имела ту же контрольную сумму! В результате наша система обновления версий забуксовала! В этом скрипте я не сравниваю файлы, а вычисляю CRC32 и сравниваю их, из-за чего может случиться ложное срабатывание. Может, имеет смысл использовать другую КС? Или даже сделать настройку? Дайте знать Ваше мнение, pse!
Prutkov
Posts: 44
Joined: Sat 08 Apr, 2023 04:58
Has thanked: 33 times
Been thanked: 2 times

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by Prutkov »

buniak_a_h wrote: Wed 17 May, 2023 19:55 Может, имеет смысл использовать другую КС?
Во-первых, я не понимаю, что такое другая КС.

А во-вторых, и в главных, — Вам в любом случае виднее.
User avatar
Taciturn
Posts: 600
Joined: Thu 26 May, 2005 17:14
Location: Санкт-Петербург
Has thanked: 89 times
Been thanked: 31 times
Contact:

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by Taciturn »

buniak_a_h, md5 должно хватить, если не рассматривать случаев специальной подделки. И считается быстро.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by buniak_a_h »

Taciturn, спасибо. На самом деле я с неё и начал - просто потому что она во всех дистрибутивах присутствует. CRC32 использовал только потому что в начале моей трудовой деятельности (82-84 годы) других не было ещё. Привык…
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by buniak_a_h »

Значит, так. Если кто-то реально хочет использовать этот скрипт в ответственной работе, замените в строке 5 crc32 на md5:
local crc = Plugin.SyncCall(IntheckerGuid, "gethash", "md5", fn)
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by buniak_a_h »

Konstantin wrote: Wed 17 May, 2023 17:37 Очень даже прошу Вас опубликовать его (в крайнем случае передать через личку)
Это ― скрипт на bat, плюс своя мелкая утилитка сравнения файлов (до первого расхождения). Использовал для создания бэкапов (ежедневных и даже чаще, когда работал). Идея была такая: копировал папку с проектом в отдельный каталог, сравнивал с предыдущим, неизменные файлы удалял и заменял на линки. Вы действительно хотите такой тупой скрипт? В наше время для этого есть git…
User avatar
Konstantin
Posts: 234
Joined: Wed 14 Jun, 2006 19:29
Location: Санкт-Петербург
Has thanked: 109 times
Been thanked: 5 times

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by Konstantin »

buniak_a_h wrote: Wed 17 May, 2023 20:48 Вы действительно хотите такой тупой скрипт?
Спасибо за пояснения! Если Вы, по любой причине, не считаете целесообразным обнародовать скрипт, то и не нужно этого делать. Спасибо за совет с жёсткими линками. При малых объёмах даже и вручную могу их сделать. А про скрипт сугубо любопытно было.
«Раньше я думал, что чудаки это те, кто делают странные вещи. Теперь я знаю, что это те, кто называют других странными.» (П. Маккартни)
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by John Doe »

Кстати существует тьма разнообразных готовых утилит, которые позволяют решить вопрос с дублирующимися файлами, в том числе и с помощью хардлинков.
Всё легко гуглится.
Мне вот попалась эта https://github.com/pkolaczk/fclones
https://t.me/FarManager — Telegram чат
Prutkov
Posts: 44
Joined: Sat 08 Apr, 2023 04:58
Has thanked: 33 times
Been thanked: 2 times

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by Prutkov »

John Doe wrote: Wed 17 May, 2023 21:29 существует тьма разнообразных готовых утилит, которые позволяют решить вопрос с дублирующимися файлами
Спасибо за полезную информацию. С учётом того, что в данной теме обсуждается и решается задача по возможности максимально и быстрого выявления дубликатов файлов средствами, присущими самому Фару. Прежде всего — макросами и/или плагинами. И, предпочтительно, без применения сторонних утилит.
Post Reply

Return to “Нужна помощь”