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

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Prutkov
Posts: 44
Joined: Sat 08 Apr, 2023 04:58
Has thanked: 33 times
Been thanked: 2 times

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

Post by Prutkov »

Latest post of the previous page:

John Doe wrote: Wed 17 May, 2023 21:29 существует тьма разнообразных готовых утилит, которые позволяют решить вопрос с дублирующимися файлами
Спасибо за полезную информацию. С учётом того, что в данной теме обсуждается и решается задача по возможности максимально и быстрого выявления дубликатов файлов средствами, присущими самому Фару. Прежде всего — макросами и/или плагинами. И, предпочтительно, без применения сторонних утилит.
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

Prutkov, так я не понял, замену файла (клона) на хардлинк делать?
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 интересовался. И я, разумеется, совсем не против если Вы сделаете обособленный скрипт по замене дублей хардлинками. А в иных, редких случаях, может и мне пригодится, и кому-то ещё...
Last edited by Prutkov on Thu 18 May, 2023 05:04, edited 1 time in total.
Prutkov
Posts: 44
Joined: Sat 08 Apr, 2023 04:58
Has thanked: 33 times
Been thanked: 2 times

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

Post by Prutkov »

buniak_a_h,

Будет замечательно если Вы дополните скрипт Поиск дубликатов текущего файла возможностью обнаруживать клон(ы) файла под курсором на временной панели и, по выбору, удалять его (их) или заменять хардлинками.
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: Thu 18 May, 2023 05:30 Будет замечательно если Вы дополните скрипт Поиск дубликатов текущего файла возможностью обнаруживать клон(ы) файла под курсором на временной панели и, по выбору, удалять его (их) или заменять хардлинками
Точно! Поддерживаю.
«Раньше я думал, что чудаки это те, кто делают странные вещи. Теперь я знаю, что это те, кто называют других странными.» (П. Маккартни)
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

Prutkov, Konstantin! Попробуйте такое:
  1. local F = far.Flags
  2.  
  3. local aMenuItem
  4.  
  5. local Info = package.loaded.regscript or function(...) return ... end
  6.  
  7. local nfo = Info {_filename or ...,
  8.  
  9.   name        = "FindDup";
  10.  
  11.   description = "Поиск дубликатов текущего файла";
  12.  
  13.   version     = "1.1.2"; --http://semver.org/lang/ru/
  14.  
  15.   author      = "BAX";
  16.  
  17.   url         = "https://forum.farmanager.com/viewtopic.php?p=174413#p174413";
  18.  
  19.   id          = "2B01CDB2-E9E6-4E8C-95E0-C3C7BD5C9730";
  20.  
  21.   history     = [[
  22.  
  23. 18.04.2023 v1.1.1 - стартовая версия
  24.  
  25. 18.05.2023 v1.1.2:
  26.  
  27.   1. Оформление для Scripts Browser-а.
  28.  
  29.   2. Исправлена неточность, из-за которой при наличии на временной панели одноимённых файлов (расположенных
  30.  
  31.      в разных папках) неправильно отмечались файлы-дубликаты (см. https://forum.farmanager.com/viewtopic.php?t=13212).
  32.  
  33.   3. В случае нахождения дубликатов предоставляется на выбор кничожить все, кроме текущего, заменить все на
  34.  
  35.      жесткие, символические ссылки либо только отметить.
  36.  
  37. ]];
  38.  
  39.   --files       = "*.cfg;*.ru.lng";
  40.  
  41.   --config      = function(nfo,name) end;
  42.  
  43.   --help        =
  44.  
  45.   execute     = function(nfo,name) aMenuItem.action() end;
  46.  
  47.  
  48.  
  49.   --disabled    = false;
  50.  
  51.   --options     = {};
  52.  
  53. }
  54.  
  55. if not nfo then return end
  56.  
  57. --local O = nfo.options
  58.  
  59.  
  60.  
  61. local IntheckerGuid = "E186306E-3B0D-48C1-9668-ED7CF64C0E65"
  62.  
  63. local ClearBefore = true
  64.  
  65. aMenuItem = {
  66.  
  67.   description="Поиск дубликатов текущего файла";
  68.  
  69.   menu='Plugins';
  70.  
  71.   area='Shell';
  72.  
  73.   guid="837A4BAD-A88A-4EDF-8743-D0C400399378";
  74.  
  75.   text=function() return not APanel.Folder and "BAX - Поиск дублей текущего файла" end;
  76.  
  77.   action=function()
  78.  
  79.     local function CheckSum(fn)
  80.  
  81.       local crc = Plugin.SyncCall(IntheckerGuid, "gethash", "md5", fn)
  82.  
  83.       return type(crc) == 'string' and crc:upper()
  84.  
  85.     end
  86.  
  87.     local i0, l0, md5_0 = APanel.CurPos, panel.GetCurrentPanelItem(nil, 1).FileSize, CheckSum(APanel.Path0.."\\"..APanel.Current)
  88.  
  89.     local aSel, aiSel = {}, {}
  90.  
  91.     for i=1,APanel.ItemCount do
  92.  
  93.       local PanItem = panel.GetPanelItem(nil, 1, i)
  94.  
  95.       if not PanItem.FileAttributes:match"d" and
  96.  
  97.          PanItem.FileSize == l0 and
  98.  
  99.          CheckSum(APanel.Path0 .. '\\' .. PanItem.FileName) == md5_0 then
  100.  
  101.         if i ~= i0 then aSel[#aSel+1] = PanItem.FileName end
  102.  
  103.         aiSel[#aiSel+1] = i
  104.  
  105.       end
  106.  
  107.     end
  108.  
  109.     if #aiSel > 1 then
  110.  
  111.       local iCh = mf.mload('BAX','FindDup.iCh') or 0
  112.  
  113.       if iCh > 1 then
  114.  
  115.         mf.postmacro(Keys, tostring(iCh-1) .. '*Tab')
  116.  
  117.       end
  118.  
  119.       iCh = far.Message("Что делать с найденными дубликатами?\n\1\n(для создания символических ссылок требуются права администратора)",
  120.  
  121.                         "Поиск дублей текущего файла",
  122.  
  123.                         "Отметить;Удалить;Создать жёсткие ссылки;Создать символические ссылки")
  124.  
  125.       if iCh > 0 then
  126.  
  127.         mf.msave('BAX','FindDup.iCh', iCh)
  128.  
  129.       end
  130.  
  131.       if iCh == 1 then
  132.  
  133.         if ClearBefore then Panel.Select(0, 0) end
  134.  
  135.         panel.SetSelection(nil, 1, aiSel, true)
  136.  
  137.       elseif iCh > 1 then -- Удалить или ссылки
  138.  
  139.         local function FullName(fn)
  140.  
  141.           if fn:match"%c:\\" then return fn
  142.  
  143.           else
  144.  
  145.             local res=APanel.Path0 .. (APanel.Path0:sub(-1) == '\\' and '' or '\\') .. fn
  146.  
  147.             return res
  148.  
  149.           end
  150.  
  151.         end
  152.  
  153.         local fn0 = FullName(APanel.Current)
  154.  
  155.         for _,v in ipairs(aSel) do
  156.  
  157.           v = FullName(v)
  158.  
  159.           win.DeleteFile(v)
  160.  
  161.           if iCh >= 3 then
  162.  
  163.             far.MkLink(fn0, v, iCh == 3 and F.LINK_HARDLINK or F.LINK_SYMLINKFILE, F.MLF_DONOTUPDATEPANEL)
  164.  
  165.           end
  166.  
  167.         end
  168.  
  169.       end
  170.  
  171.     else
  172.  
  173.       far.Message"Дубликатов не найдено"
  174.  
  175.     end
  176.  
  177.   end;
  178.  
  179. }
  180.  
  181.  
  182.  
  183. MenuItem(aMenuItem)
  184.  
  185.  
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

Last edited by HaRT on Fri 19 May, 2023 12:51, edited 3 times in total.
Reason: Спрятан офтопик
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: Fri 19 May, 2023 07:29Попробуйте такое
Спасибо. Но у меня скрипт только находит дубликаты (любые, в т.ч. и 0-размера) и выделяет их. Но ни удаления, ни создания ссылок (ни жёстких и ни символических) не делает.
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

Prutkov wrote: Fri 19 May, 2023 10:28 Спасибо. Но у меня скрипт только находит дубликаты (любые, в т.ч. и 0-размера) и выделяет их. Но ни удаления, ни создания ссылок (ни жёстких и ни символических) не делает.
Вы уверены, что ищете именно дубликаты текущего файла (а не все дубликаты)? Вы просили именно этот скрипт переделать.
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: Fri 19 May, 2023 10:42Вы уверены...?
Да, уверен. Во-первых, перепроверил по-разному.

Во-вторых, ни какого другого скрипта, который предлагал бы:
{ Отметить } [ Удалить ] [ Создать жёсткие ссылки ] [ Создать символические ссылки ]
у меня не установлено. Только этот.
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 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: Fri 19 May, 2023 11:13вопрос задаёт, но только помечает?
Да. Именно так.
под конэму ФАР валиться стал
У меня последняя сборка Фара под КонЭму. И всё в порядке.
Буду в личку отладку слать
Хорошо. С учётом того, что сегодня пятница, и у меня с ответом может получаться не быстро. Но я готов сколько потребуется.
Last edited by Prutkov on Fri 19 May, 2023 11:28, edited 1 time in total.
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: Fri 19 May, 2023 11:13Т.е. вопрос задаёт, но только помечает?
Да. Подтверждаю информацию Prutkov-а.
Фар 3.0.6146.0 x64 из под ConEmu.
«Раньше я думал, что чудаки это те, кто делают странные вещи. Теперь я знаю, что это те, кто называют других странными.» (П. Маккартни)
User avatar
buniak_a_h
Posts: 4268
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

Prutkov, а если выбрать создание симлинка, просит привилегий админа?
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: Fri 19 May, 2023 11:44а если выбрать создание симлинка, просит привилегий админа?
Нет. У меня Фар настроен из под админа запускаться.
Prutkov
Posts: 44
Joined: Sat 08 Apr, 2023 04:58
Has thanked: 33 times
Been thanked: 2 times

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

Post by Prutkov »

buniak_a_h,

Попробовал создавать ссылки нативной командой AltF6. И символические и жёсткие создаются нормально. И админа не требуют.
Post Reply

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