Pull to refresh

Как сделать теговую ФС удобной для пользования

Reading time 3 min
Views 3.8K
Вдохновленный этим топиком, я решил разобраться, что же должна уметь теговая файловая система, чтобы ей можно было полноценно пользоваться. Как было замечено в статье, для реализации достаточно создавать ярлыки на один и тот же файл в папках, соответствующих разным тегам. Осталось сделать нормальное юзабилити, чтобы этой функцией можно было пользоваться. Эта статья представляет собой подобие технического задания, освещающего механизм хранения тегов, а также возможности работы с ними из файлового менеджера и из консоли. Возможно, в будущем кто-то возьмется за ее реализацию. Может быть, это сделаю я.


Представление информации


Наша виртуальная система хранится в своей корневой папке, являющейся обычной папкой в обычной ФС (например, /tagfs). Все указанные ниже адреса лежат внутри этой папки. Служебная информация нашей ФС хранится в отдельной папке (/.fs/).

Каждому файлу соответствует список тегов. Если некоторые файлы помечены тегом «tag1», в корневой папке создается папка /tag1, в нее кладутся ссылки на соответствующие файлы.

Для файла можно также указать иерархический тег, например, «programs/python». Для его хранения будет создана папка /programs/python, а файлы можно будет найти и по тегу «programs», и по тегу «python». Это позволит держать теги в порядке, а не складывать их в одну кучу.

Физически файл хранится там, куда указывает первый в списке тег. Таким образом, указав в качестве первого тега «video», мы заставим систему положить файл в папку /video, в которую можно примонтировать диск большого объема.

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

Для упрощения понимания систематизируем:

Виды файлов:
  • основной файл — хранится в месте, соответствующем основному тегу
  • ссылка — хранится в месте, соответствующем неосновному тегу
  • обычный файл — хранится внутри папки с иерархической структурой


Виды папок:
  • тег — папку можно найти, введя ее название
  • иерархическая папка — располагается так же, как основной файл, а ее название уже не является тегом
  • ссылка на тег
  • ссылка на иерархическую папку


Работа через файловый менеджер


В адресной строке можно набрать список тегов и получить список файлов с этими тегами. В этом списке могут быть файлы с одинаковыми именами. Есть возможность удалить тег из условия одним щелчком (какой-нибудь красный крестик). При вводе тега должно работать автодополнение, да и вообще тег можно не вводить, а выбрать из списка (отсортированного по частоте использования). При вводе одного тега должен отобразиться список папок, соответствующих вложенным в него тегам.

В свойствах файла или папки можно указать список тегов. Если файл или папка находятся вне папки теговой ФС, то при указании тега они будут перемещены. Для папки при этом можно выбрать, сохранить ли ее иерархическую структуру (в противном случае все вложенные файлы будут помечены указанными тегами и перемещены в одно место). Если удалить все теги из списка, придется выбрать папку для сохранения файла — файл без тегов не может храниться в области действия нашей ФС.

Также можно задать логическое условие из операторов «и», «или», «не» и скобок. Если в поисковой выдаче создать файл, он будет помечен соответствующими тегами; если поиск был по логическому выражению, откроется диалог для выбора нужных тегов. В контекстном меню файла должен быть пункт «Открыть файлы по главному тегу», если мы не находимся в папке соответствующего главного тега. При создании папки создается иерархическая папка. Чтобы вместо папки создать тег, достаточно указать его в списке тегов какого-либо файла.

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

Работа через консоль


Для нашей системы должна быть реализована полноценная работа через консоль. Очевидно, средствами обычной ФС можно перемещаться по папкам и работать с файлами, соответствующими этим папкам-тегам. Должна нужна возможность написать что-то вроде «cd tag1 and tag2» и перейти в виртуальную папку, содержащую результаты выдачи, посмотреть их список командой ls. Должна быть утилита для просмотра и редактирования списка тегов для файла, команда для перехода в папку главного тега указанного файла, команда для копирования списка тегов одного файла в теги другого.
Tags:
Hubs:
+5
Comments 11
Comments Comments 11

Articles