Виртуальная папка-архив для поиска по регулярному выражению

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Ответить
x-code
Сообщения: 16
Зарегистрирован: Вт мар 20, 2012 09:22

Виртуальная папка-архив для поиска по регулярному выражению

Сообщение x-code »

Добрый день
Интересует следующий плагин файловой системы. Есть ли такое вообще, а если нет то насколько реально написать и что посоветуете взять за основу.

Плагин ассоциируется с файлами с некоторым расширением (по аналогии с *.zip и т.д.)
Внутри файла данного типа (назову его для краткости и по аналогии файлом "архива") находится путь и маска поиска файлов; маска может быть как простой (звездочки) так и полноценным регулярным выражением (что безусловно лучше т.к. дает больше возможностей).

Открытие "архива" приводит к "входу" в виртуальную папку, содержащую все файлы, находящиеся по заданному пути, включая все
вложенные папки, и удовлетворяющие заданной маске. Т.е. запускается поиск и результаты поиска попадают в виртуальную папку.

например такой файл ищет по пути d:/data1/data2 и вложенным папкам все файлы, содержащие в имени решетку и три цифры непосредственно за ней:

Код: Выделить всё

path=d:/data1/data2
mask=#\d{3}
возможен и более сложный язык запросов, например учитывающий время, размер, наличие и содержимое ADS и т.д.
возможно несколько таких масок - тогда в виртуальную папку попадает всё, что удовлетворяет хотя-бы одной.
возможно и прямое перечисление точных путей к конкретным файлам и папкам - без поиска.

В некотором смысле это способ сохранить в файлах часто используемые "поиски" и пользоваться ими как обычными папками, при этом размещать их в удобных и осмысленных для пользователя местах в файловой системе.

Еще одна аналогия - ярлыки *.lnk; ярлык указывает на один файл, данный же механизм создает виртуальную папку, указывающую на несколько или произвольное, заранее неизвестное количество файлов.

Это отличается от папки с симлинками/хардлинками тем, что содержимое регенерируется автоматически каждый раз при обращении.

Возможно еще урезанная аналогия - "библиотеки" Windows.

Все найденные файлы, отображаемые в виртуальной папке, можно открывать, редактировать, копировать из этой виртуальной папки (но не в нее) и т.п.

Было бы неплохо, чтобы плагин кэшировал результаты предыдущего поиска, сохраняя их непосредственно в файле "архива" в виде простого списка путей к найденным файлам. Это ускорит работу. При этом в фоне (или по отдельной команде?) должен осуществляться повторный поиск и обновление содержимого виртуальной папки и кэша в "архиве".
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

что посоветуете взять за основу.
Можно попробовать решить задачу шаблонами поиска и фильтрами.

Например:

Код: Выделить всё

filter2_SearchFor=#\d{3}
filter2_SearchIn=d:\data1\data2
filter2_SearchText=
filter2_SearchFlags=0|002002001020||||||||22220|0000|||

Код: Выделить всё

[em_cd_data2]
cmd=cd d:\data1\data2

[em_cd_filter2]
cmd=cd >filter2

[em_apply_filter2]
cmd=em_cd_data2, em_cd_filter2
Наделать нужных шаблонов и выстроить меню из em_команд. Можно сделать обычный bar-файл "в виде меню" на главной панели инструментов.
x-code
Сообщения: 16
Зарегистрирован: Вт мар 20, 2012 09:22

Сообщение x-code »

Ну что же, я даже собрался и написал такой WCX плагин.
И оно даже работает.
Файлик с расширением *.dir, в котором путь и маска поиска, открывается как архив и показывает внутри себя все файлы, удовлетворяющие маске, список формируется рекурсивным поиском по всем поддиректориям. Можно открыть, создается симлинк на системную временную папку (хотя неудобно то что нужно нажимать кнопку "распаковать", и приходится делать симлинк вместо прямой ссылки на исходный файл).
Конечно, до мечты превратить файловую систему в базу данных далеко как до луны, но как костыль для конкретной задачи сойдет.
Ответить