Kategorier i stedet for mapper eller det semantiske filsystem til Linux

Dataklassificering i sig selv er et interessant forskningsemne. Jeg elsker at indsamle oplysninger, der synes nødvendige, og jeg har altid forsøgt at skabe logiske mappehierarkier for mine filer, og en dag i en drøm så jeg et smukt og praktisk program til at tildele tags til filer, og jeg besluttede, at jeg ikke kunne leve sådan længere.

Problemet med hierarkiske filsystemer

Brugere står ofte over for problemet med at vælge, hvor den næste nye fil skal gemmes, og problemet med at finde deres egne filer (nogle gange er filnavne slet ikke beregnet til at blive husket af en person).

En vej ud af situationen kan være semantiske filsystemer, som normalt er en tilføjelse til det traditionelle filsystem. Mapper i dem erstattes af semantiske attributter, også kaldet tags, kategorier og metadata. Jeg vil bruge udtrykket "kategori" oftere, fordi... I forbindelse med filsystemer er ordet "tag" nogle gange lidt mærkeligt, især når "subtags" og "tag-aliaser" optræder.

Tildeling af kategorier til filer eliminerer stort set problemet med at gemme og søge efter en fil: Hvis du husker (eller gætter) mindst en af ​​de kategorier, der er tildelt en fil, forsvinder filen aldrig fra visningen.

Tidligere blev dette emne rejst mere end én gang på Habré (tid, два, tre, fire osv.), her beskriver jeg min løsning.

Vejen til realisering

Umiddelbart efter den nævnte drøm beskrev jeg i min notesbog kommandogrænsefladen, der giver det nødvendige arbejde med kategorier. Så besluttede jeg, at jeg om en uge eller to kunne skrive en prototype ved hjælp af Python eller Bash, og så skulle jeg arbejde på at skabe en grafisk shell i Qt eller GTK. Virkeligheden viste sig som altid at være meget barskere, og udviklingen blev forsinket.

Den oprindelige idé var først og fremmest at lave et program med en praktisk og kortfattet kommandolinjegrænseflade, der kunne oprette, slette kategorier, tildele kategorier til filer og slette kategorier fra filer. Jeg ringede til programmet vitis.

Første forsøg på at skabe vitis endte i ingenting, da meget tid begyndte at blive brugt på arbejde og college. Det andet forsøg var allerede noget: til kandidatafhandlingen lykkedes det mig at gennemføre det planlagte projekt og endda lave en prototype af GTK-skallen. Men den version viste sig at være så upålidelig og ubelejlig, at meget skulle gentænkes.

Jeg brugte faktisk selv den tredje version i meget lang tid, efter at have overført flere tusinde af mine filer til kategorier. Dette blev også meget lettet af den implementerede bash-afslutning. Men nogle problemer, såsom manglen på automatiske kategorier og evnen til at gemme filer med samme navn, var stadig tilbage, og programmet var allerede bøjet under sin egen kompleksitet. Sådan kom jeg til behovet for at løse komplekse softwareudviklingsproblemer: skrive detaljerede krav, udvikle et funktionelt testsystem, studere emballageinstruktioner og meget mere. Jeg er nu nået frem til min plan, så denne ydmyge skabelse kan præsenteres for det frie samfund. Specifik filhåndtering som f.eks. styring gennem begrebet kategorier rejser uventede problemer og problemer med at løse dem vitis affødte yderligere fem projekter omkring sig selv, hvoraf nogle vil blive nævnt i artiklen. Indtil nu vitis Jeg har ikke købt en grafisk skal, men bekvemmeligheden ved at bruge filkategorier fra kommandolinjen opvejer allerede for mig eventuelle fordele ved en almindelig grafisk filhåndtering.

Eksempler på anvendelse

Lad os starte enkelt - opret en kategori:

vitis create Музыка

Lad os tilføje noget sammensætning til det som et eksempel:

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

Du kan se indholdet af kategorien "Musik" ved at bruge underkommandoen "vis":

vitis show Музыка

Du kan afspille den ved at bruge underkommandoen "åben".

vitis open Музыка

Fordi Hvis vi kun har én fil i kategorien "Musik", vil kun den ene starte. Med det formål at åbne filer med deres standardprogrammer lavede jeg et separat værktøj vts-fs-åben (Standardværktøjer som xdg-open eller mimeopen passede ikke til mig af en række årsager; men hvis noget, i indstillingerne kan du angive et andet værktøj til universel filåbning). Dette værktøj fungerer godt på forskellige distributioner med forskellige arbejdsmiljøer, så jeg anbefaler at installere det sammen med vitis.

Du kan også direkte angive programmet til at åbne filer:

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

Kategorier i stedet for mapper eller det semantiske filsystem til Linux

Lad os oprette flere kategorier og tilføje filer ved hjælp af "tildel". Hvis filer er tildelt kategorier, der endnu ikke eksisterer, bliver du bedt om at oprette dem. En unødvendig anmodning kan undgås ved at bruge -yes flaget.

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

Nu vil vi tilføje kategorien "Matematik" til filen "Statistisk pakke R: sandsynlighedsteori og matematisk statistik.pdf". Vi ved, at denne fil allerede er kategoriseret som "R", og derfor kan vi bruge kategoristien fra Vitis-systemet:

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

Heldigvis gør bash-afslutning dette nemt.

Lad os se, hvad der skete, ved at bruge flaget --categories for at se en liste over kategorier for hver fil:

vitis show R --categories

Kategorier i stedet for mapper eller det semantiske filsystem til Linux

Bemærk, at filerne også automatisk er blevet kategoriseret efter format, type (kombinerer formater) og filtypenavn. Disse kategorier kan deaktiveres, hvis det ønskes. Senere vil jeg helt sikkert lokalisere deres navne.

Lad os tilføje noget andet til "Matematik" for variation:

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

Og nu bliver tingene interessante. I stedet for kategorier kan du skrive udtryk med operationerne forening, skæring og subtraktion, det vil sige bruge operationer på mængder. For eksempel vil skæringspunktet mellem "Math" og "R" resultere i én fil.

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

Lad os trække referencer til sproget "R" fra "Matematik":

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

Vi kan uden formål kombinere musik og R-sproget:

vitis show Музыка u: R

Flaget -n giver dig mulighed for at "trække" de nødvendige filer fra anmodningsresultatet ved hjælp af tal og/eller områder, f.eks. -n 3-7eller noget mere kompliceret: -n 1,5,8-10,13. Det er ofte nyttigt med åben underkommando, som giver dig mulighed for at åbne de ønskede filer fra en liste.

Kategorier i stedet for mapper eller det semantiske filsystem til Linux

Mens vi bevæger os væk fra at bruge et konventionelt kataloghierarki, er det ofte nyttigt at have indlejrede kategorier. Lad os oprette en underkategori "Statistik" under kategorien "Matematik" og tilføje denne kategori til den relevante fil:

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

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

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

Kategorier i stedet for mapper eller det semantiske filsystem til Linux

Vi kan se, at denne fil nu har kategorien "Math/Statistics" i stedet for "Math" (ekstra links spores).

Det kan være ubelejligt at adressere den fulde sti, lad os oprette et "globalt" alias:

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

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

Kategorier i stedet for mapper eller det semantiske filsystem til Linux

Ikke kun almindelige filer

Internet links

For at ensrette lagringen af ​​enhver information vil det som minimum være nyttigt at kategorisere links til internetressourcer. Og dette er muligt:

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

En fil med HTML-sidehovedet og .desktop-udvidelsen oprettes på et særligt sted. Dette er det traditionelle genvejsformat i GNU/Linux. Sådanne genveje kategoriseres automatisk som netværksbogmærker.

Naturligvis oprettes genveje til brug:

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

Udførelse af kommandoen får det nyligt gemte link til at blive åbnet i browseren. Kategoriserede genveje til internetkilder kan tjene som erstatning for browserbogmærker.

Fil fragmenter

Det er også nyttigt at have kategorier for individuelle stykker filer. Ikke en dårlig anmodning, vel? Men den nuværende implementering påvirker indtil videre kun almindelige tekstfiler, lyd- og videofiler. Lad os sige, at du skal markere en bestemt del af en koncert eller et sjovt øjeblik i en film, så når du bruger assign, kan du bruge flagene -fragname, -start, -finish. Lad os gemme pauseskærmen fra "DuckTales":

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

vitis open Заставки

I virkeligheden sker der ingen filskæring, i stedet oprettes en pointer-fil til fragmentet, som beskriver filtypen, stien til filen, begyndelsen og slutningen af ​​fragmentet. Oprettelse og åbning af pointere til fragmenter er uddelegeret til hjælpeprogrammer, som jeg har lavet specielt til disse formål - disse er mediafragmenter og fragplayer. Den første skaber, den anden åbner. Ved lyd- og videooptagelser lanceres mediefilen fra en bestemt til en bestemt position ved hjælp af VLC-afspilleren, så den skal også være i systemet. Først ville jeg gøre dette baseret på mplayer, men af ​​en eller anden grund var det meget skævt med positionering på det rigtige tidspunkt.
I vores eksempel oprettes filen "Duck Tales intro.fragpointer" (den placeres et særligt sted), og derefter afspilles et fragment fra begyndelsen af ​​filen (da –start ikke blev angivet ved oprettelsen) indtil den 59. andet mærke, hvorefter VLC lukker .

Et andet eksempel er, da vi besluttede at kategorisere en enkelt optræden ved en koncert af en berømt kunstner:

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

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

Når den åbnes, vil filen blive inkluderet i den ønskede position og lukkes efter fire et halvt minut.

Hvordan det hele fungerer + yderligere funktioner

Lagring af kategorier

Allerede i begyndelsen af ​​at tænke på at organisere et semantisk filsystem kom der tre måder i tankerne: gennem lagring af symbolske links, gennem en database, gennem en beskrivelse i XML. Den første metode vandt, fordi... dels er det nemt at implementere, dels har brugeren mulighed for at se på kategorier direkte fra filsystemet (og det er praktisk og vigtigt). Ved begyndelsen af ​​brugen vitis "Vitis"-biblioteket og ".config/vitis/vitis.conf"-konfigurationsfilen oprettes i brugerens hjemmemappe. Mapper svarende til kategorier oprettes i ~/Vitis, og symbolske links til de originale filer oprettes i disse kategorimapper. Kategorialiasser er også kun links til dem. Naturligvis passer tilstedeværelsen af ​​"Vitis"-biblioteket i hjemmebiblioteket muligvis ikke nogle mennesker. Vi kan skifte til et hvilket som helst andet sted:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

På et vist tidspunkt bliver det klart, at det ikke giver mening at kategorisere filer spredt på forskellige steder, da deres placering kan ændre sig. Derfor lavede jeg til at begynde med en mappe til mig selv, hvor jeg dumt dumpede alt og gav det alle kategorier. Så besluttede jeg, at det ville være rart at formalisere dette øjeblik på programniveau. Sådan opstod begrebet "filplads". Ved begyndelsen af ​​brugen vitis Det ville ikke skade med det samme at konfigurere en sådan placering (alle de filer, vi har brug for, vil blive gemt der) og aktivere automatisk lagring:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Uden automatisk lagring, når du bruger "tildel" underkommandoen, vil flaget --save være påkrævet, hvis du vil gemme den tilføjede fil til filpladsen.

Desuden kan du tilføje flere filpladser og ændre deres prioriteter; dette kan være nyttigt, når der er mange filer, og de er gemt på forskellige medier. Jeg vil ikke overveje denne mulighed her; detaljer kan findes i programhjælpen.

Semantisk filsystemmigrering

Under alle omstændigheder kan Vitis-biblioteket og filområderne teoretisk nogle gange flytte fra sted til sted. For at få det til at fungere, oprettede jeg et separat hjælpeprogram link-editor, som kan masseredigere links og erstatte dele af stien med andre:

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

I det første tilfælde, efter at vi er flyttet fra /mnt/MyFavoriteDisk/Vitis/ til hjemmebiblioteket, redigeres de symbolske links, der er knyttet til aliasserne. I det andet tilfælde, efter at have ændret placeringen af ​​filpladsen, ændres alle links i Vitis til nye i overensstemmelse med anmodningen om at erstatte en del af deres sti.

Automatiske kategorier

Hvis du kører kommandoen vitis service get autocategorization, kan du se, at automatiske kategorier som standard tildeles efter format (Format og Type) og filtypenavn (Udvidelse).

Dette er nyttigt når du for eksempel skal finde noget blandt PDF'er eller se hvad du har gemt fra EPUB og FB2, du kan blot køre anmodningen

vitis show Format/MOBI u: Format/FB2

Det skete bare sådan, at standard GNU/Linux-værktøjer såsom fil eller mimetype ikke passede mig, netop fordi de ikke altid bestemmer formatet korrekt; jeg var nødt til at lave min egen implementering baseret på filsignaturer og filtypenavne. Generelt er emnet for definition af filformater et interessant emne for forskning og fortjener en separat artikel. For nu kan jeg sige, at jeg måske ikke har givet ægte anerkendelse for alle formater i verden, men generelt fungerer det allerede godt. Sandt nok definerer EPUB nu formatet som ZIP (generelt set er dette berettiget, men i praksis bør dette ikke betragtes som normal adfærd). Indtil videre skal du overveje denne funktion som eksperimentel og rapportere eventuelle fejl. I mærkelige situationer kan du altid bruge filtypenavne, for eksempel Extension/epub.

Hvis autokategorier efter format er aktiveret, er autokategorier, der grupperer nogle formater efter type, også aktiveret: "Arkiver", "Billeder", "Video", "Lyd" og "Dokumenter". Lokaliserede navne vil også blive lavet til disse underkategorier.

Hvad er ikke sagt

vitis Det viste sig at være et meget mangefacetteret værktøj, og det er svært at dække alt på én gang. Lad mig kort nævne, hvad du ellers kan gøre:

  • kategorier kan slettes og fjernes fra filer;
  • resultaterne af udtryksforespørgsler kan kopieres til den specificerede mappe;
  • filer kan køres som programmer;
  • Vis kommandoen har mange muligheder, for eksempel sortering efter navn/dato for ændring eller adgang/størrelse/udvidelse, visning af filegenskaber og stier til originaler, muliggør visning af skjulte filer osv.;
  • Når du gemmer links til internetkilder, kan du også gemme lokale kopier af HTML-sider.

Alle detaljer kan findes i brugerhjælpen.

Udsigterne

Skeptikere siger ofte, at "ingen vil sætte disse tags selv." Ved at bruge mit eget eksempel kan jeg bevise det modsatte: Jeg har allerede kategoriseret mere end seks tusinde filer, oprettet mere end tusind kategorier og aliaser, og det var det værd. Når et hold vitis open План åbne din opgaveliste, eller når med én kommando vitis open LaTeX Når du åbner Stolyarovs bog om LaTeX-layoutsystemet, er det allerede moralsk svært at bruge filsystemet "på gammeldags måde."

På den baggrund opstår der en række ideer. For eksempel kan du lave en automatisk radio, der tænder for tematisk musik efter det aktuelle vejr, ferie, ugedag, tidspunkt på dagen eller året. Endnu tættere på emnet er en musikafspiller, der kender til kategorier og kan afspille musik ved udtryk med operationer på kategorier som på sæt. Det er nyttigt at lave en dæmon, der vil overvåge mappen "Downloads" og tilbyde at kategorisere nye filer. Og selvfølgelig skal vi lave en normal grafisk semantisk filhåndtering. Engang lavede jeg endda en webservice til virksomheden til kollektiv brug af filer, men den var ikke en prioritet og blev irrelevant, selvom den opnåede et højt præstationsniveau. (På grund af større ændringer i vitis, det er ikke længere brugbart.)

her er en lille demo

Kategorier i stedet for mapper eller det semantiske filsystem til Linux

Konklusion

vitis er ikke det første forsøg på radikalt at ændre stilen i arbejdet med data, men jeg anså det for vigtigt at implementere mine ideer og gøre implementeringen offentlig tilgængelig under GNU GPL-licensen. For nemheds skyld er der lavet en deb-pakke til x86-64; den burde fungere på alle moderne Debian-distributioner. Der var mindre problemer på ARM (mens alle andre programmer var relateret til vitis, fungerer fint), men i fremtiden vil der blive udarbejdet en arbejdspakke til denne platform (armhf). Jeg er stoppet med at oprette RPM-pakker for nu på grund af problemer på Fedora 30 og vanskeligheden ved at sprede sig over mange RPM-distributioner, men senere pakker vil stadig blive lavet til mindst et par af dem. I mellemtiden kan du bruge make && make install eller checkinstall.

Tak til jer alle for jeres opmærksomhed! Jeg håber, at denne artikel og dette projekt kan være nyttige.

Link til projektlager

Kilde: www.habr.com

Tilføj en kommentar