Page 1 of 3

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

Posted: Fri 08 Jan, 2021 04:48
by buniak_a_h
Novosedoff wrote: Fri 01 Jan, 2021 19:14 Более общая задача в моём случае выглядела так: есть такая утилитка FastPhotoTagger, которая позволяет добавлять ключевые слова к картинкам и фоткам. Я обычно когда с планшета читаю, то скриншочу те страницы, которые мне кажутся интересными. А потом кидаю их сразу в облако. В облаке созданы несколько тематических папок (например, История, Финансы, Демография и тд) и порой я, в зависимости от содержания страницы, могу закинуть скриншот в 1-2-3 папки одновременно. И вот здесь начинаются проблемы, потому что потом когда позднее я начинаю работать с этими страницами и добавлять к ним метатаги для более быстрого поиска, то порой сталкиваюсь с тем, что одна и та же картинка оказалась в разных облачных папках под разными именами (обычно это связано с тем, что я в спешке присваиваю файлам простые типизированные имена типа 111.jpg - подозреваю, что Google-облако в этом случае видит что в папке, скажем, История уже 33 файла с таким именем и индексирует новый файл добавляя (34) в скобках, а в другой папке может быть 55 таких файлов и, соответственно, туда Google поместит его добавив на конце имени "(56)", хотя честно говоря алгоритм присвоения имён в облаке Google мне самому непонятен)! Вот здесь утилиты для Far являются незаменимым подспорьем. Это избавляет от необходимости по несколько раз заниматься метатагированием одних и тех же картинок, сокращая работу в среднем 1.5-2 раза
Я сделал маленький макрос, группирующий (пока - в памяти) одинаковые файлы на двух панелях и отмечающий их. Что делать с этим дальше, я не очень понял. Например, если Вам надо добавить тег в файл на активной панели и другой тег в такой же файл на пассивной панели, и Ваша утилита FastPhotoTagger позволяет это делать через параметры командной строки, то эта задача решается просто (я не доделывал до этого, но там дальше легко). Другой вариант - если у Вас есть скрипт на любом языке сценариев (например, на bat), то его можно было бы вызвать, передав ему имя файла на активной и на пассивной панели. Или список одинаковых файлов на активной и на пассивной панели (если файл не уникален даже в пределах панели) Хорошо бы Вы уточнили задачку.
Во вложении - макрос. Доступен из меню плагинов («Сравнение панелей по содержимому»). Попробуйте хотя бы пока это.
ContentCompare.lua.7z
Распаковать в любой подкаталог каталога %FARPROFILE%\Macros\Scripts
(1.68 KiB) Downloaded 31 times

Как выделить на панели элементы с именами из (текстового) файла

Posted: Thu 14 Jan, 2021 06:33
by Novosedoff


Провёл испытание вашего скрипта. В одной панели было 262 картинки одной из папок, в другой - 574 картинки из другой папки. Скрипт сработал великолепно и нашёл 51 одинаковых файлов, половина из которых была с разными именами. Без вашего скрипта мне пришлось бы запускать в каждой папке Integrity Checker, а потом искать совпадения путём матчинга списков в Excel, т.е. с кучей ручных трудозатрат. Сняли с меня целую гору своей небольшой автоматизацией, за что Вам огромное спасибо. Каких-то иных действий в продолжение, как мне видится, не требуется. Задача полностью решена.

Как выделить на панели элементы с именами из (текстового) файла

Posted: Thu 14 Jan, 2021 15:48
by Ann
buniak_a_h wrote: Fri 08 Jan, 2021 04:48 Я сделал маленький макрос, группирующий (пока - в памяти) одинаковые файлы на двух панелях и отмечающий их. ... Доступен из меню плагинов («Сравнение панелей по содержимому»). Попробуйте хотя бы пока это.
ContentCompare.lua.7z
Эвент весьма полезный. Спасибо!
1. Желательно бы сделать его вызов и "обычным образом" тоже (так будет побыстрее).
2. При наличии на панели файла нулевого размера вылезает ошибка.

Как выделить на панели элементы с именами из (текстового) файла

Posted: Thu 14 Jan, 2021 16:42
by buniak_a_h
Ann wrote: Thu 14 Jan, 2021 15:48 1. Желательно бы сделать его вызов и "обычным образом" тоже (так будет побыстрее).
Это Вы можете сделать простым клавиатурным макросом. Просто у меня хоткеев уже почти не осталось, а настройку делать влом.
Я предполагал, что кто-нить захочет вызов по хоткею. Поэтому для удобства доделки выделил основной функционал в функцию CmpFunc().
Ann wrote: Thu 14 Jan, 2021 15:48 2. При наличии на панели файла нулевого размера вылезает ошибка.
Видимо, вылет в плагине Integrity Checker. Ок, сделаю перехват такой ситуации. Заодно сделаю "рыбу" для макроса, вызываемого по хоткею. Вставить конкретный хоткей Вы, наверно, сможете сами ;-)

Как выделить на панели элементы с именами из (текстового) файла

Posted: Thu 14 Jan, 2021 17:24
by buniak_a_h
Ann, попробуйте то, что во вложении. Там требуется переделать "под себя" две строки (83 и 86); помечены комментариями

Как выделить на панели элементы с именами из (текстового) файла

Posted: Thu 14 Jan, 2021 22:23
by Ann
buniak_a_h wrote: Thu 14 Jan, 2021 17:24 попробуйте то, что во вложении.
Большое спасибо за оперативную отзывчивость. Теперь очень лучше.

При этом: при наличии на панели файл(а/ов) нулевого размера он/они ложно помечаются.

Как выделить на панели элементы с именами из (текстового) файла

Posted: Thu 14 Jan, 2021 22:46
by buniak_a_h
Ann wrote: Thu 14 Jan, 2021 22:23 при наличии на панели файл(а/ов) нулевого размера он/они ложно помечаются.
А почему "ложно"? Я проверил: отмечаются только если на обеих панелях есть пустые файлы. Но они же совпадают по содержимому? Потому и отмечаются.
А что, не надо было?

Как выделить на панели элементы с именами из (текстового) файла

Posted: Thu 14 Jan, 2021 23:11
by Ann
buniak_a_h wrote: Thu 14 Jan, 2021 22:46 А почему "ложно"?
Потому что у меня помечаются и тогда, когда на одной панели есть "нулевые" файлы, а на другой — нет или это другие "нулевые".
Сугубо для моей практики порожние файлы было бы целесообразнее вообще игнорировать.

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

Posted: Thu 14 Jan, 2021 23:37
by buniak_a_h
Ann wrote: Thu 14 Jan, 2021 23:11 у меня помечаются и тогда, когда на одной панели есть "нулевые" файлы, а на другой — нет
Такие у меня точно не выделяются
Ann wrote: Thu 14 Jan, 2021 23:11 или это другие "нулевые"
Как в том диалоге: инструктор - ученику на водителя: "Поворачиваем направо. Нет, на другое право"
Как это - "другой нулевой"?
Ну да ладно. Для скорости поправьте у себя: вместо строки
if not Item.FileAttributes:match"d" then
(это примерно 38-я строка; точно не могу с казать - у меня другой скрипт)
запишите строку:
if not Item.FileAttributes:match"d" and Item.FileSize > 0 then

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

Posted: Thu 14 Jan, 2021 23:47
by HaRT
buniak_a_h wrote: Thu 14 Jan, 2021 22:46 они же совпадают по содержимому? Потому и отмечаются.
Поддерживаю
Ann wrote: Thu 14 Jan, 2021 23:11 Сугубо для моей практики порожние файлы было бы целесообразнее вообще игнорировать.
Снять выделение с файлов нулевого размера — это просто. Думаю, не стоит ради них нарушать логическую стройность общего скрипта.

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

Posted: Thu 14 Jan, 2021 23:58
by Ann
HaRT wrote: Thu 14 Jan, 2021 23:47 Снять выделение с файлов нулевого размера — это просто. Думаю, не стоит ради них нарушать логическую стройность общего скрипта.
Возражений нет. Мною было подчёркнуто, что речь о субъективной практике.
buniak_a_h wrote: Thu 14 Jan, 2021 23:37 Для скорости поправьте у себя: вместо строки
if not Item.FileAttributes:match"d" then
запишите строку:
if not Item.FileAttributes:match"d" and Item.FileSize > 0 then
Полное удовлетворение и огромная благодарность.

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

Posted: Fri 15 Jan, 2021 01:13
by Novosedoff


Кстати, не нашёл в интернете в доступном описании по языку lua описание использованной Вами в скрипте команды tin ..

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

Posted: Fri 15 Jan, 2021 01:22
by 2useven10

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

Posted: Fri 15 Jan, 2021 21:06
by citRiks
buniak_a_h,
а есть идеи как отменить calculations не выходя из ФАРа ?
А то он пока не досчитает не успокоится..

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

Posted: Fri 15 Jan, 2021 21:23
by citRiks
Впрочем, решаемо:

Code: Select all

local function CreateList(_Panel, WhatPanel, whatpanel)
	local Result = {}
	local res_status
	local Path = _Panel.Path..(_Panel.Path:sub(-1) == '\\' and '' or '\\')
	local i1 = 1
	local i2 = _Panel.Selected and _Panel.SelCount or _Panel.ItemCount
	local GetFun = _Panel.Selected and panel.GetSelectedPanelItem or panel.GetPanelItem
	for i = i1, i2 do
		local Item = GetFun(nil, whatpanel, i)
		if not Item.FileAttributes:match("d")
		then
			local	FullName = Path..Item.FileName
			local	plgin_call_res = Plugin.SyncCall("E186306E-3B0D-48C1-9668-ED7CF64C0E65", "gethash", 'SHA-512', FullName, true)
			if	plgin_call_res == "userabort"
			then	res_status = plgin_call_res
				break
			end
			local sKey = ('%.10d;%s'):format(
				Item.FileSize,
			--	Item.FileSize == 0 and (' '):rep(128) or
				plgin_call_res
					)
			if Result[sKey] == nil then Result[sKey] = { } end
			tin(Result[sKey], Item.FileName)
		end
	end
	return Result, res_status
end -- CreateList
.. и:

Code: Select all

	local AList, act_status
	local PList, pas_status
	AList, act_status = CreateList(APanel, 0, 1)
	if act_status == "userabort" then goto after_create_list end
	PList, pas_status = CreateList(PPanel, 1, 0)
	if pas_status == "userabort" then goto after_create_list end
	::after_create_list::
--	local ASelList, PSelList, KeyList = { }, { }, { }
	local ASelList, PSelList = { }, { }
Да, я знаю что GOTO это плохо, только не знаю почему :)
Думаю что так же как и со всем остальным,
в одних ситуациях это хорошо, а в других - плохо