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

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
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 »

Latest post of the previous page:

John Doe, citRiks,переписка интересная, но для для темы "Ликбез по LUA"
John Doe, это же Ваша тема? Не могли бы Вы добавить туда что-то типа "отличия нашего LUA от стандартного LUA версии 5.1"
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 »

Это есть в теме LuaMacro, в виде ссылки на соответствующий документ на сайте luajit.

viewtopic.php?f=15&t=7995
https://t.me/FarManager — Telegram чат
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,

Скрипт ContentCompare с большой пользой и с удовольствием применяю давненько.

В связи с этим всё стеснялся попросить. Но, наконец, допекло.

Дело вот в чём. У меня многократно повторяется одна и та же следующая ситуация. В папке с великим множеством файлов имею базовый файл и точно знаю, что в этой же папке находятся как минимум один, а чаще — несколько, его клонов под существенно другими наименованиями. Организационная причина тому ещё долго не искоренится – коллективное использование персональных компьютеров неопределённым и хаотически ротируемым составом пользователей.

Просьба, по возможности, составить скрипт (макрос, запускающийся шорткатом), делающий так: ставлю курсор на базовый файл, применяю скрипт и получаю выделенными сам базовый файл и все его клоны, и только их; а если я ошибся и клоны отсутствуют, то — сообщение об этом.
«Раньше я думал, что чудаки это те, кто делают странные вещи. Теперь я знаю, что это те, кто называют других странными.» (П. Маккартни)
Prutkov
Posts: 44
Joined: Sat 08 Apr, 2023 04:58
Has thanked: 33 times
Been thanked: 2 times

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

Post by Prutkov »

buniak_a_h, Поддерживаю просьбу Konstantin'а.
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, Prutkov, представляю «наколенный» скрипт (не оформлен по правилам, не оптимизирован). Вызывается через пункт МЕНЮ плагинов. Вызов как макроса делается легко: присвойте букву-акселератор и сделайте клавиатурный макрос. У меня уже цензурные буквы кончились…
  1. local IntheckerGuid = "E186306E-3B0D-48C1-9668-ED7CF64C0E65"
  2.  
  3. local ClearBefore = true
  4.  
  5. MenuItem {
  6.  
  7.   description="Поиск дубликатов текущего файла";
  8.  
  9.   menu='Plugins';
  10.  
  11.   area='Shell';
  12.  
  13.   guid="837A4BAD-A88A-4EDF-8743-D0C400399378";
  14.  
  15.   text=function() return not APanel.Folder and "BAX - Поиск дублей текущего файла" end;
  16.  
  17.   action=function()
  18.  
  19.     local function CheckSum(fn)
  20.  
  21.       return Plugin.SyncCall(IntheckerGuid, "gethash", "md5", fn):upper()
  22.  
  23.     end
  24.  
  25.     local l0, md5_0 = panel.GetCurrentPanelItem(nil, 1).FileSize, CheckSum(APanel.Path0.."\\"..APanel.Current)
  26.  
  27.     local aSel = {}
  28.  
  29.     for i=1,APanel.ItemCount do
  30.  
  31.       local PanItem = panel.GetPanelItem(nil, 1, i)
  32.  
  33.       if not PanItem.FileAttributes:match"d" and
  34.  
  35.          PanItem.FileSize == l0 and
  36.  
  37.          CheckSum(APanel.Path0 .. '\\' .. PanItem.FileName) == md5_0 then
  38.  
  39.         aSel[#aSel+1] = '"' .. PanItem.FileName .. '"'
  40.  
  41.       end
  42.  
  43.     end
  44.  
  45.     if #aSel > 1 then
  46.  
  47.       if ClearBefore then Panel.Select(0, 0) end
  48.  
  49.       Panel.Select(0, 1, 2, table.concat(aSel, '\n'))
  50.  
  51.     else
  52.  
  53.       far.Message"Дубликатов не найдено"
  54.  
  55.     end
  56.  
  57.   end;
  58.  
  59. }
Prutkov
Posts: 44
Joined: Sat 08 Apr, 2023 04:58
Has thanked: 33 times
Been thanked: 2 times

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

Post by Prutkov »

buniak_a_h,

Почти что случайно, по подсказке моих друзей-коллег, нашёл я на github-е скрипт Panel.SelectDuplicatesFileNames.lua, который быстро выделяет дубликаты имён файлов на бранч-панели.

Сабжевый же скрипт ищет дубликаты одного конкретного файла в конкретной папке. Причём находит дубли и в тех случаях, когда дубликату сменили имя, даже если и существенно поменял его.

А могли бы Вы сделать скрипт, который, как и вышеуказанный макрос, выделял бы дубликаты на временной панели, но, в отличие от того макроса, не только одноимённые, а и переименованные?
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
Posts: 44
Joined: Sat 08 Apr, 2023 04:58
Has thanked: 33 times
Been thanked: 2 times

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

Post by Prutkov »



Да, Вы вполне правильно поняли. Именно файлы
buniak_a_h wrote: Sun 14 May, 2023 21:36не в единственном экземпляре
среди прочих, собранных из разных подпапок на временню панель.

Собственно моя задача состоит в следующем. На определённый носитель несколько человек копируют результаты своей деятельности. Корень носителя разветвлён множеством папок и подпапок. И мне нужно определить в этой массе дубликаты файлов.
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
Posts: 44
Joined: Sat 08 Apr, 2023 04:58
Has thanked: 33 times
Been thanked: 2 times

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

Post by Prutkov »

buniak_a_h wrote: Mon 15 May, 2023 09:06Как Вам идея?
Умозрительно, группировка обнаруженных дубликатов не повредит. Если только не сильно усложнит скрипт.
Ведь есть ShiftF12.
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: Mon 15 May, 2023 13:49 Ведь есть ShiftF12
Представил себе: половина файлов (разных!) имеют дубликаты. В результате половина файлов будет помечено. НО! какие из них "пары" - так не выявить. Поэтому пользы от такой отметки не вижу.
Prutkov wrote: Mon 15 May, 2023 13:49 Если только не сильно усложнит скрипт.
На самом деле сильно. Но как-то разделять разные файлы, имеющие двойников, очень хочется. Например, для таких двойников заполнять неиспользуемое поле (CRC, например) и в схеме расцветки предусмотреть разные цвета для разных CRC. Увы, пока я не нашёл, как сделать раскраску, зависящей от поля кроме FileName и FileAttributes. Возможно, имеет смысл вообще подменить панель фейковым диалогом :-)
Ладно, пока сделаю просто отметку. Там понадобится, видимо, некоторая оптимизация, а то работать скрипт будет часы…
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: Mon 15 May, 2023 17:27 как-то разделять разные файлы, имеющие двойников, очень хочется
Принципиально это верно. Имена у дубликатов бывает что различаются очень сильно.
buniak_a_h wrote: Mon 15 May, 2023 17:27 а то работать скрипт будет часы…
Даже и в таком случае это было бы существенно быстрее чем вручную. Но, зная уже Ваш профессионализм, от скрипта ожидается всё-таки более шустрая работа. Ждём, надеемся и верим.
2useven10
Posts: 5204
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

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

Post by 2useven10 »

Last edited by HaRT on Mon 15 May, 2023 20:19, edited 1 time in total.
Reason: Спрятан офтопик
Prutkov
Posts: 44
Joined: Sat 08 Apr, 2023 04:58
Has thanked: 33 times
Been thanked: 2 times

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

Post by Prutkov »

Last edited by HaRT on Mon 15 May, 2023 20:19, edited 1 time in total.
Reason: Спрятан офтопик
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

 ! Message from: HaRT
Господа, если хотите устроить пикировку, прошу делать это в личных сообщениях. Тут дальнейший подобный офтопик будет удалён.
Фар есть инструмент, а не нянька. © 2009 DrKnS
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,
Prutkov wrote: Sun 14 May, 2023 21:15 А могли бы Вы сделать скрипт, который ... выделял бы дубликаты на временной панели ..., но ... не только одноимённые, а и переименованные?
Наконец-то я разобрался в чём суть просьбы и присоединяюсь к ней.
«Раньше я думал, что чудаки это те, кто делают странные вещи. Теперь я знаю, что это те, кто называют других странными.» (П. Маккартни)
Post Reply

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