Categories en lloc de directoris, o el sistema de fitxers semàntic per a Linux

La classificació de les dades en si és un tema de recerca interessant. M'encanta recollir informació que sembla necessària i sempre he intentat crear jerarquies de directoris lògics per als meus fitxers, i un dia, en un somni, vaig veure un programa preciós i còmode per assignar etiquetes als fitxers i vaig decidir que no podia viure. així més temps.

El problema dels sistemes de fitxers jeràrquics

Sovint, els usuaris s'enfronten al problema de triar on desar el següent fitxer nou i el problema de trobar els seus propis fitxers (de vegades els noms dels fitxers no tenen la intenció de ser recordats per una persona).

Una manera de sortir de la situació poden ser els sistemes de fitxers semàntics, que solen ser un complement del sistema de fitxers tradicional. Els directoris que hi ha es substitueixen per atributs semàntics, també anomenats etiquetes, categories i metadades. Faré servir el terme "categoria" més sovint, perquè... En el context dels sistemes de fitxers, la paraula "etiqueta" de vegades és una mica estranya, sobretot quan apareixen "subetiquetes" i "àlies d'etiquetes".

Assignar categories als fitxers elimina en gran mesura el problema d'emmagatzemar i cercar un fitxer: si recordeu (o endevineu) almenys una de les categories assignades a un fitxer, el fitxer mai desapareixerà de la vista.

Anteriorment, aquest tema es va plantejar més d'una vegada a Habré (temps, два, 03:00, quatre etc.), aquí descric la meva solució.

Camí cap a la Realització

Immediatament després del somni esmentat, vaig descriure al meu quadern la interfície d'ordres que proporciona el treball necessari amb categories. Aleshores vaig decidir que en una o dues setmanes podria escriure un prototip amb Python o Bash, i després hauria de treballar en la creació d'un shell gràfic en Qt o GTK. La realitat, com sempre, va resultar molt més dura i el desenvolupament es va retardar.

La idea original era, primer de tot, fer un programa amb una interfície de línia d'ordres còmoda i concisa que creés, esborrés categories, assignés categories a fitxers i esborrés categories dels fitxers. Vaig trucar al programa vitis.

Primer intent de crear vitis va acabar en res, ja que es va començar a dedicar molt de temps a la feina i a la universitat. El segon intent ja va ser alguna cosa: per al treball de fi de màster, vaig aconseguir completar el projecte previst i fins i tot fer un prototip de la shell GTK. Però aquella versió va resultar ser tan poc fiable i incòmode que s'havia de repensar moltes coses.

De fet, vaig utilitzar la tercera versió durant molt de temps, després d'haver transferit milers dels meus fitxers a categories. Això també es va facilitar molt amb la finalització de bash implementada. Però alguns problemes, com ara la manca de categories automàtiques i la capacitat d'emmagatzemar fitxers amb el mateix nom, encara romanien, i el programa ja estava doblat per la seva pròpia complexitat. Així és com vaig arribar a la necessitat de resoldre problemes complexos de desenvolupament de programari: escriure requisits detallats, desenvolupar un sistema de proves funcionals, estudiar instruccions d'embalatge i molt més. Ara he arribat al meu pla, perquè aquesta humil creació pugui ser presentada a la comunitat lliure. La gestió específica d'arxius com la gestió a través del concepte de categories planteja problemes i problemes inesperats, i en la seva resolució vitis va generar cinc projectes més al seu voltant, alguns dels quals s'esmentaran a l'article. Fins ara vitis No he comprat cap intèrpret d'ordres gràfic, però la comoditat d'utilitzar categories de fitxers des de la línia d'ordres ja supera per a mi els avantatges d'un gestor de fitxers gràfic normal.

Exemples d'ús

Comencem de manera senzilla: creeu una categoria:

vitis create Музыка

Afegim una mica de composició com a exemple:

vitis assign Музыка -f "The Ink Spots - I Don't Want To Set The World On Fire.mp3"

Podeu veure el contingut de la categoria "Música" mitjançant la subordre "mostrar":

vitis show Музыка

Podeu reproduir-lo mitjançant la subordre "obrir".

vitis open Музыка

Perquè Si només tenim un fitxer a la categoria "Música", només s'iniciarà aquest. Amb el propòsit d'obrir fitxers amb els seus programes predeterminats, vaig fer una utilitat independent vts-fs-open (Les eines estàndard com xdg-open o mimeopen no em van adequar per diversos motius; però, en tot cas, a la configuració podeu especificar una altra utilitat per a l'obertura universal de fitxers). Aquesta utilitat funciona bé en diferents distribucions amb diferents entorns de treball, així que recomano instal·lar-la juntament amb Vitis.

També podeu especificar directament el programa per obrir fitxers:

vitis open Музыка --app qmmp

Categories en lloc de directoris, o el sistema de fitxers semàntic per a Linux

Creem més categories i afegim fitxers amb "assignar". Si els fitxers estan assignats a categories que encara no existeixen, se us demanarà que els creeu. Es pot evitar una sol·licitud innecessària utilitzant el senyalador -yes.

vitis assign Программирование R -f "Введение в R.pdf" "Статистический пакет R: теория вероятностей и матстатистика.pdf" --yes

Ara volem afegir la categoria “Matemàtiques” al fitxer “Paquet estadístic R: teoria de probabilitats i estadística matemàtica.pdf”. Sabem que aquest fitxer ja està classificat com a "R" i per tant podem utilitzar el camí de la categoria del sistema Vitis:

vitis assign Математика -v "R/Статистический пакет R: теория вероятностей и матстатистика.pdf"

Afortunadament, la finalització del bash ho facilita.

Vegem què ha passat, utilitzant el senyalador --categories per veure una llista de categories per a cada fitxer:

vitis show R --categories

Categories en lloc de directoris, o el sistema de fitxers semàntic per a Linux

Tingueu en compte que els fitxers també s'han classificat automàticament per format, tipus (combina formats) i extensió de fitxer. Aquestes categories es poden desactivar si es desitja. Més endavant definitivament localitzaré els seus noms.

Afegim alguna cosa més a "Matemàtiques" per a la varietat:

vitis assign Математика -f "Математический анализ - 1984.pdf" Перельман_Занимательная_математика_1927.djvu 

I ara les coses es posen interessants. En lloc de categories, podeu escriure expressions amb les operacions d'unió, intersecció i resta, és a dir, utilitzar operacions sobre conjunts. Per exemple, la intersecció de "Matemàtiques" amb "R" donarà lloc a un fitxer.

vitis show R i: Математика

Restem referències a la llengua "R" de "Matemàtiques":

vitis show Математика  R  #или vitis show Математика c: R

Podem combinar sense rumb la música i el llenguatge R:

vitis show Музыка u: R

El senyalador -n us permet "treure" els fitxers requerits del resultat de la sol·licitud per nombres i/o intervals, per exemple, -n 3-7, o alguna cosa més complicada: -n 1,5,8-10,13. Sovint és útil amb la subordre oberta, que us permet obrir els fitxers desitjats d'una llista.

Categories en lloc de directoris, o el sistema de fitxers semàntic per a Linux

Tot i que estem allunyant de l'ús d'una jerarquia de directoris convencional, sovint és útil tenir categories imbricades. Creem una subcategoria "Estadístiques" a la categoria "Matemàtiques" i afegim aquesta categoria al fitxer adequat:

vitis create Математика/Статистика

vitis assign Математика/Статистика -v "R/Введение в R.pdf"

vitis show Математика --categories

Categories en lloc de directoris, o el sistema de fitxers semàntic per a Linux

Podem veure que aquest fitxer ara té la categoria "Matemàtiques/Estadístiques" en lloc de "Matemàtiques" (es fan un seguiment dels enllaços addicionals).

Abordar el camí complet pot ser inconvenient, creem un àlies "global":

vitis assign Математика/Статистика -a Статистика

vitis show Статистика

Categories en lloc de directoris, o el sistema de fitxers semàntic per a Linux

No només fitxers normals

Enllaços a Internet

Per unificar l'emmagatzematge de qualsevol informació, seria útil, com a mínim, categoritzar els enllaços a recursos d'Internet. I això és possible:

vitis assign Хабр Цветоаномалия -i https://habr.com/ru/company/sfe_ru/blog/437304/ --yes

Es crearà un fitxer en un lloc especial amb la capçalera de la pàgina HTML i l'extensió .desktop. Aquest és el format de drecera tradicional a GNU/Linux. Aquestes dreceres es classifiquen automàticament com a adreces d'interès de xarxa.

Naturalment, es creen dreceres per utilitzar-les:

vitis open Цветоаномалия

L'execució de l'ordre fa que l'enllaç recentment desat s'obri al navegador. Les dreceres categoritzades a fonts d'Internet poden servir com a reemplaçament de les adreces d'interès del navegador.

Fragments d'arxiu

També és útil tenir categories per a peces individuals de fitxers. No és una mala petició, oi? Però la implementació actual fins ara només afecta fitxers de text sense format, fitxers d'àudio i vídeo. Suposem que necessiteu marcar una part determinada d'un concert o un moment divertit d'una pel·lícula, i quan feu servir assignar podeu utilitzar les banderes -fragname, -start, -finish. Desem l'estalvi de pantalla de "DuckTales":

vitis assign vitis assign -c Заставки -f Duck_Tales/s01s01.avi --finish 00:00:59 --fragname "Duck Tales intro"

vitis open Заставки

En realitat, no es produeix cap tall de fitxer; en canvi, es crea un fitxer de punter al fragment, que descriu el tipus de fitxer, la ruta al fitxer, l'inici i el final del fragment. La creació i obertura de punters a fragments es delega a les utilitats que he creat especialment per a aquests propòsits: són mediafragmenter i fragplayer. El primer crea, el segon obre. En el cas d'enregistraments d'àudio i vídeo, el fitxer multimèdia es llança des d'una determinada posició a una determinada posició mitjançant el reproductor VLC, per la qual cosa també ha d'estar al sistema. Al principi volia fer això basant-se en mplayer, però per alguna raó va ser molt tort amb el posicionament en el moment adequat.
En el nostre exemple, es crea el fitxer "Duck Tales intro.fragpointer" (es col·loca en un lloc especial), i després es reprodueix un fragment des del començament del fitxer (ja que no s'ha especificat –start en crear) fins al 59 segona marca, després de la qual VLC tanca.

Un altre exemple és quan vam decidir classificar una única actuació en un concert d'un artista famós:

vitis assign Лепс "Спасите наши души" -f Григорий Лепc - Концерт Парус - песни Владимира Высоцкого.mp4 --fragname "Спасите наши души" --start 00:32:18 --finish 00:36:51

vitis open "Спасите наши души"

Quan s'obre, el fitxer s'inclourà a la posició desitjada i es tancarà al cap de quatre minuts i mig.

Com funciona tot + funcions addicionals

Emmagatzematge de categories

Al principi de pensar en organitzar un sistema de fitxers semàntics, van venir al cap tres maneres: mitjançant l'emmagatzematge d'enllaços simbòlics, a través d'una base de dades, a través d'una descripció en XML. El primer mètode va guanyar, perquè... d'una banda, és fàcil d'implementar i, d'altra banda, l'usuari té l'oportunitat de mirar categories directament des del sistema de fitxers (i això és convenient i important). Al començament de l'ús vitis El directori "Vitis" i el fitxer de configuració ".config/vitis/vitis.conf" es creen al directori inicial de l'usuari. Els directoris corresponents a categories es creen a ~/Vitis i els enllaços simbòlics als fitxers originals es creen en aquests directoris de categories. Els àlies de categoria també són només enllaços a ells. Per descomptat, la presència del directori "Vitis" al directori d'inici pot no convenir a algunes persones. Podem canviar a qualsevol altra ubicació:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

En un moment determinat, queda clar que té poc sentit categoritzar fitxers dispersos en diferents llocs, ja que la seva ubicació pot canviar. Per tant, per començar, vaig crear un directori per a mi, on ho vaig deixar estúpidament tot i li vaig donar totes les categories. Aleshores vaig decidir que estaria bé formalitzar aquest moment a nivell de programa. Així va aparèixer el concepte d'"espai de fitxers". Al començament de l'ús vitis No estaria malament configurar immediatament aquesta ubicació (tots els fitxers que necessitem s'emmagatzemaran allà) i habilitar el desat automàtic:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Sense desar automàticament, quan utilitzeu la subordre "assignar", caldrà el senyalador --save si voleu desar el fitxer afegit a l'espai de fitxers.

A més, podeu afegir diversos espais de fitxers i canviar-ne les prioritats; això pot ser útil quan hi ha molts fitxers i s'emmagatzemen en diferents suports. No consideraré aquesta possibilitat aquí; els detalls es poden trobar a l'ajuda del programa.

Migració del sistema de fitxers semàntic

De totes maneres, el directori de Vitis i els espais de fitxers poden, teòricament, moure's d'un lloc a un altre. Perquè funcioni, vaig crear una utilitat independent editor d'enllaços, que pot editar enllaços de manera massiva, substituint parts del camí per altres:

cp -r /mnt/MyFavoriteDisk/Vitis/ ~/Vitis
link-editor -d ~/Vitis/ -f /mnt/MyFavoriteDisk/Vitis/ -r ~/Vitis/ -R
cp -r /mnt/MyFavoriteDisk/Filespace/ ~/MyFiles
link-editor -d ~/Vitis/ -f /mnt/FlashDrive-256/Filespace/ -r ~/MyFiles -R

En el primer cas, després d'haver passat de /mnt/MyFavoriteDisk/Vitis/ al directori inicial, s'editen els enllaços simbòlics associats als àlies. En el segon cas, després de canviar la ubicació de l'espai de fitxers, tots els enllaços de Vitis es canvien per nous d'acord amb la sol·licitud de substitució de part del seu camí.

Categories automàtiques

Si executeu l'ordre vitis service get autocategorization, podeu veure que, per defecte, les categories automàtiques s'assignen per format (Format i Tipus) i per extensió de fitxer (Extensió).

Això és útil quan, per exemple, necessiteu trobar alguna cosa entre els PDF o mirar el que heu emmagatzemat des d'EPUB i FB2, simplement podeu executar la sol·licitud.

vitis show Format/MOBI u: Format/FB2

Va donar la casualitat que les eines estàndard de GNU/Linux, com ara el fitxer o el tipus mime, no em van bé precisament perquè no sempre determinen correctament el format; vaig haver de fer la meva pròpia implementació a partir de signatures i extensions de fitxer. En general, el tema de la definició de formats de fitxer és un tema interessant per a la recerca i mereix un article a part. De moment puc dir que potser no he donat un veritable reconeixement a tots els formats del món, però en general ja funciona bé. És cert que ara EPUB defineix el format com a ZIP (en general, això està justificat, però a la pràctica això no s'ha de considerar un comportament normal). De moment, considereu aquesta funció experimental i informeu de qualsevol error. En situacions estranyes, sempre podeu utilitzar categories d'extensió de fitxer, per exemple, Extensió/epub.

Si s'activen les autocategories per format, també s'activen les autocategories que agrupen alguns formats per tipus: “Arxius”, “Imatges”, “Vídeo”, “Àudio” i “Documents”. També es faran noms localitzats per a aquestes subcategories.

El que no es diu

vitis Va resultar ser una eina molt polièdrica i és difícil cobrir-ho tot alhora. Permeteu-me mencionar breument què més podeu fer:

  • les categories es poden suprimir i eliminar dels fitxers;
  • els resultats de les consultes d'expressió es poden copiar al directori especificat;
  • els fitxers es poden executar com a programes;
  • L'ordre show té moltes opcions, per exemple, ordenar per nom/data de modificació o accés/mida/extensió, mostrar les propietats del fitxer i els camins als originals, habilitar la visualització dels fitxers ocults, etc.;
  • Quan deseu enllaços a fonts d'Internet, també podeu desar còpies locals de pàgines HTML.

Podeu trobar els detalls complets a l'ajuda de l'usuari.

Perspectives

Els escèptics sovint diuen que "ningú posarà aquestes etiquetes per si mateix". Amb el meu propi exemple, puc demostrar el contrari: ja he categoritzat més de sis mil fitxers, he creat més de mil categories i àlies, i ha valgut la pena. Quan un equip vitis open План obriu la vostra llista de tasques pendents o amb una ordre vitis open LaTeX Quan obriu el llibre de Stolyarov sobre el sistema de disseny LaTeX, ja és moralment difícil utilitzar el sistema de fitxers "a la manera antiga".

Sobre aquesta base, sorgeixen diverses idees. Per exemple, podeu fer una ràdio automàtica que engegui música temàtica segons el temps actual, les vacances, el dia de la setmana, l'hora del dia o l'any. Encara més a prop del tema hi ha un reproductor de música que coneix les categories i pot reproduir música per expressió amb operacions en categories com en platós. És útil fer un dimoni que supervisarà el directori "Descàrregues" i oferirà categoritzar fitxers nous. I, per descomptat, hauríem de fer un gestor de fitxers semàntic gràfic normal. Hi havia una vegada fins i tot crear un servei web per a l'empresa per a l'ús col·lectiu d'arxius, però no era una prioritat i es va tornar irrellevant, tot i que va aconseguir un alt nivell de rendiment. (A causa dels grans canvis en el vitis, ja no es pot utilitzar.)

aquí teniu una petita demostració

Categories en lloc de directoris, o el sistema de fitxers semàntic per a Linux

Conclusió

Vitis no és el primer intent de canviar radicalment l'estil de treballar amb dades, però vaig considerar important implementar les meves idees i fer que la implementació estigui disponible públicament sota la llicència GNU GPL. Per comoditat, s'ha fet un paquet deb per a x86-64; hauria de funcionar en totes les distribucions Debian modernes. Hi va haver dificultats menors a ARM (mentre que tots els altres programes es relacionaven amb vitis, funciona bé), però en el futur es compilarà un paquet de treball per a aquesta plataforma (armhf). He deixat de crear paquets RPM de moment a causa de problemes a Fedora 30 i la dificultat de propagar-se per moltes distribucions RPM, però encara es faran paquets posteriors per almenys un parell d'ells. Mentrestant podeu utilitzar make && make install o checkinstall.

Gràcies a tots per la vostra atenció! Espero que aquest article i aquest projecte puguin ser útils.

Enllaç al repositori del projecte

Font: www.habr.com

Afegeix comentari