Kategorije namesto imenikov ali Semantični datotečni sistem za Linux

Sama klasifikacija podatkov je zanimiva raziskovalna tema. Rad zbiram informacije, ki se zdijo potrebne, in vedno sem poskušal ustvariti logične hierarhije imenikov za svoje datoteke in nekega dne sem v sanjah videl čudovit in priročen program za dodeljevanje oznak datotekam in sem se odločil, da ne morem živeti tako več.

Problem hierarhičnih datotečnih sistemov

Uporabniki se pogosto srečujejo s problemom izbire, kam shraniti naslednjo novo datoteko, in problemom iskanja lastnih datotek (včasih imena datotek sploh niso namenjena temu, da bi si jih oseba zapomnila).

Izhod iz situacije so lahko semantični datotečni sistemi, ki so običajno dodatek k tradicionalnemu datotečnemu sistemu. Imeniki v njih so nadomeščeni s semantičnimi atributi, imenovanimi tudi oznake, kategorije in metapodatki. Pogosteje bom uporabljal izraz »kategorija«, ker... V kontekstu datotečnih sistemov je beseda "tag" včasih nekoliko nenavadna, še posebej, ko se pojavijo "subtags" in "tag aliasi".

Dodeljevanje kategorij datotekam v veliki meri odpravi težavo pri shranjevanju in iskanju datoteke: če se spomnite (ali ugibate) vsaj ene od kategorij, dodeljenih datoteki, datoteka ne bo nikoli izginila iz pogleda.

Prej je bila ta tema več kot enkrat izpostavljena na Habréju (čas, два, 3, štiri itd.), tukaj opisujem svojo rešitev.

Pot do Uresničitve

Takoj po omenjenih sanjah sem v svoji beležnici opisal ukazni vmesnik, ki omogoča potrebno delo s kategorijami. Potem sem se odločil, da lahko v tednu ali dveh napišem prototip s Pythonom ali Bashom, potem pa bom moral delati na ustvarjanju grafične lupine v Qt ali GTK. Realnost se je, kot vedno, izkazala za veliko hujšo in razvoj je bil zakasnjen.

Prvotna zamisel je bila najprej narediti program s priročnim in jedrnatim vmesnikom ukazne vrstice, ki bo ustvarjal, brisal kategorije, dodeljeval kategorije datotekam in brisal kategorije iz datotek. Poklical sem program vnetje.

Prvi poskus ustvarjanja vnetje končalo v nič, saj se je veliko časa začelo posvečati službi in fakulteti. Drugi poskus je bil že nekaj: za magistrsko nalogo mi je uspelo dokončati načrtovani projekt in narediti celo prototip lupine GTK. Toda ta različica se je izkazala za tako nezanesljivo in neprijetno, da je bilo treba marsikaj premisliti.

Pravzaprav sem sam zelo dolgo uporabljal tretjo različico, saj sem nekaj tisoč svojih datotek prenesel v kategorije. To je močno olajšalo tudi implementirano dokončanje bash. Toda nekatere težave, kot je pomanjkanje samodejnih kategorij in možnost shranjevanja istoimenskih datotek, so še vedno ostale in program je bil že upognjen lastni zapletenosti. Tako sem prišel do potrebe po reševanju zapletenih problemov razvoja programske opreme: napisati podrobne zahteve, razviti sistem za funkcionalno testiranje, preučiti navodila za pakiranje in še veliko več. Zdaj sem prišel do svojega načrta, tako da lahko to skromno stvaritev predstavim svobodni skupnosti. Posebno upravljanje datotek, kot je upravljanje s konceptom kategorij, sproža nepričakovana vprašanja in težave ter pri njihovem reševanju vnetje okoli sebe zarodila še pet projektov, od katerih bodo nekateri omenjeni v članku. Do zdaj vnetje Nisem kupil grafične lupine, vendar priročnost uporabe kategorij datotek iz ukazne vrstice zame že odtehta vse prednosti običajnega grafičnega upravitelja datotek.

Primeri uporabe

Začnimo preprosto – ustvarite kategorijo:

vitis create Музыка

Dodajmo mu nekaj kompozicije kot primer:

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

Vsebino kategorije »Glasba« si lahko ogledate s podukazom »show«:

vitis show Музыка

Predvajate ga lahko s podukazom »odpri«.

vitis open Музыка

Ker Če imamo samo eno datoteko v kategoriji »Glasba«, se bo zagnala samo ta. Za odpiranje datotek s privzetimi programi sem naredil ločen pripomoček vts-fs-odprto (standardna orodja, kot sta xdg-open ali mimeopen, mi iz več razlogov niso ustrezala; če pa kaj, lahko v nastavitvah določite drug pripomoček za univerzalno odpiranje datotek). Ta pripomoček dobro deluje na različnih distribucijah z različnimi delovnimi okolji, zato priporočam, da ga namestite skupaj z vitisom.

Prav tako lahko neposredno določite program za odpiranje datotek:

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

Kategorije namesto imenikov ali Semantični datotečni sistem za Linux

Ustvarimo več kategorij in dodamo datoteke z uporabo »dodeli«. Če so datoteke dodeljene kategorijam, ki še ne obstajajo, boste pozvani, da jih ustvarite. Nepotrebni zahtevi se lahko izognete z uporabo zastavice -yes.

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

Zdaj želimo dodati kategorijo »Matematika« v datoteko »Statistični paket R: teorija verjetnosti in matematična statistika.pdf«. Vemo, da je ta datoteka že kategorizirana kot "R", zato lahko uporabimo pot kategorije iz sistema Vitis:

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

Na srečo dokončanje bash to olajša.

Poglejmo, kaj se je zgodilo z uporabo zastavice --categories za prikaz seznama kategorij za vsako datoteko:

vitis show R --categories

Kategorije namesto imenikov ali Semantični datotečni sistem za Linux

Upoštevajte, da so bile datoteke samodejno razvrščene tudi glede na obliko, vrsto (združuje oblike zapisa) in pripono datoteke. Te kategorije lahko po želji onemogočite. Kasneje bom zagotovo lokaliziral njihova imena.

Za popestritev dodamo "Matematici" še nekaj:

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

In zdaj stvari postajajo zanimive. Namesto kategorij lahko napišete izraze z operacijami združevanja, preseka in odštevanja, torej uporabite operacije na množicah. Na primer, presečišče "Math" z "R" bo povzročilo eno datoteko.

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

Odštejmo sklicevanja na jezik "R" od "matematike":

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

Brezciljno lahko kombiniramo glasbo in jezik R:

vitis show Музыка u: R

Zastavica -n vam omogoča, da zahtevane datoteke "izvlečete" iz rezultatov zahteve s številkami in/ali obsegi, na primer, -n 3-7ali kaj bolj zapletenega: -n 1,5,8-10,13. Pogosto je uporaben s podukazom open, ki omogoča odpiranje želenih datotek s seznama.

Kategorije namesto imenikov ali Semantični datotečni sistem za Linux

Medtem ko se odmikamo od uporabe običajne hierarhije imenikov, je pogosto koristno imeti ugnezdene kategorije. Ustvarimo podkategorijo »Statistika« pod kategorijo »Matematika« in dodajmo to kategorijo v ustrezno datoteko:

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

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

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

Kategorije namesto imenikov ali Semantični datotečni sistem za Linux

Vidimo lahko, da ima ta datoteka zdaj kategorijo »Matematika/Statistika« namesto »Matematika« (dodatnim povezavam se sledi).

Naslavljanje celotne poti je lahko neprijetno, ustvarimo "globalni" vzdevek:

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

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

Kategorije namesto imenikov ali Semantični datotečni sistem za Linux

Ne samo navadne datoteke

Internetne povezave

Za poenotenje shranjevanja kakršnih koli informacij bi bilo koristno vsaj kategorizirati povezave do internetnih virov. In to je možno:

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

Na posebnem mestu bo ustvarjena datoteka z glavo strani HTML in končnico .desktop. To je tradicionalni format bližnjic v GNU/Linux. Takšne bližnjice so samodejno kategorizirane kot omrežni zaznamki.

Seveda so bližnjice ustvarjene za uporabo:

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

Izvedba ukaza povzroči, da se na novo shranjena povezava odpre v brskalniku. Kategorizirane bližnjice do internetnih virov lahko služijo kot nadomestilo za zaznamke brskalnika.

Fragmenti datoteke

Koristno je imeti tudi kategorije za posamezne dele datotek. Ni slaba prošnja, kajne? Toda trenutna izvedba zaenkrat vpliva le na datoteke z navadnim besedilom, zvočne in video datoteke. Recimo, da morate označiti določen del koncerta ali smešen trenutek v filmu, nato pa lahko pri uporabi dodelitve uporabite zastavice -fragname, -start, -finish. Shranimo ohranjevalnik zaslona iz "DuckTales":

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

vitis open Заставки

V resnici ne pride do rezanja datoteke, temveč se ustvari kazalna datoteka na fragment, ki opisuje vrsto datoteke, pot do datoteke, začetek in konec fragmenta. Ustvarjanje in odpiranje kazalcev na fragmente je preneseno na pripomočke, ki sem jih naredil posebej za te namene - to sta mediafragmenter in fragplayer. Prvi ustvarja, drugi odpira. Pri avdio in video posnetkih se predstavnostna datoteka poganja z določenega na določeno mesto s predvajalnikom VLC, zato mora biti tudi v sistemu. Sprva sem želel to narediti na podlagi mplayerja, vendar je bil iz neznanega razloga zelo ukrivljen pri pozicioniranju v pravem trenutku.
V našem primeru je ustvarjena datoteka »Duck Tales intro.fragpointer« (postavljena je na posebno mesto), nato pa se predvaja fragment od začetka datoteke (ker –start ni bil določen pri ustvarjanju) do 59. druga oznaka, po kateri se VLC zapre.

Drug primer je, ko smo se odločili kategorizirati posamezen nastop na koncertu znanega umetnika:

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

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

Ko se datoteka odpre, bo vključena na želeno mesto in se zapre po štirih minutah in pol.

Kako vse deluje + dodatne funkcije

Shranjevanje kategorij

Že na samem začetku razmišljanja o ureditvi semantičnega datotečnega sistema so mi prihajale na misel tri poti: preko shranjevanja simbolnih povezav, preko baze podatkov, preko opisa v XML. Prva metoda je zmagala, saj... po eni strani je enostavno implementirati, po drugi strani pa ima uporabnik možnost ogleda kategorij neposredno iz datotečnega sistema (in to je priročno in pomembno). Na začetku uporabe vnetje Imenik »Vitis« in konfiguracijska datoteka ».config/vitis/vitis.conf« se ustvarita v uporabnikovem domačem imeniku. Imeniki, ki ustrezajo kategorijam, so ustvarjeni v ~/Vitis in v teh imenikih kategorij so ustvarjene simbolične povezave do izvirnih datotek. Vzdevki kategorij so tudi samo povezave do njih. Seveda prisotnost imenika "Vitis" v domačem imeniku nekaterim morda ne bo ustrezala. Lahko preklopimo na katero koli drugo lokacijo:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

Na določeni točki postane jasno, da ni smiselno kategorizirati datotek, razpršenih na različnih mestih, saj se lahko njihova lokacija spreminja. Zato sem za začetek ustvaril imenik zase, kamor sem neumno odložil vse in mu dal vse kategorije. Potem sem se odločil, da bi bilo lepo formalizirati ta trenutek na programski ravni. Tako se je pojavil koncept "datotečnega prostora". Na začetku uporabe vnetje Ne bi škodilo, če takoj nastavite takšno lokacijo (tam bodo shranjene vse datoteke, ki jih potrebujemo) in omogočite samodejno shranjevanje:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Brez samodejnega shranjevanja bo ob uporabi podukaza "assign" potrebna zastavica --save, če želite shraniti dodano datoteko v datotečni prostor.

Poleg tega lahko dodate več datotečnih prostorov in spremenite njihove prioritete; to je lahko koristno, ko je datotek veliko in so shranjene na različnih medijih. Tukaj ne bom upošteval te možnosti; podrobnosti najdete v pomoči programa.

Selitev semantičnega datotečnega sistema

Kakorkoli že, imenik Vitis in prostori datotek se lahko teoretično včasih premaknejo z mesta na mesto. Da bi deloval, sem ustvaril ločen pripomoček urejevalnik povezav, ki lahko množično ureja povezave in nadomešča dele poti z drugimi:

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

V prvem primeru, potem ko se premaknemo iz /mnt/MyFavoriteDisk/Vitis/ v domači imenik, se uredijo simbolične povezave, povezane z vzdevki. V drugem primeru se po spremembi lokacije datotečnega prostora vse povezave v Vitisu spremenijo v nove v skladu z zahtevo po zamenjavi dela njihove poti.

Samodejne kategorije

Če zaženete ukaz vitis service get autocategorization, lahko vidite, da so samodejne kategorije privzeto dodeljene glede na format (Format in Vrsta) in pripono datoteke (Extension).

To je uporabno, ko morate na primer poiskati nekaj med datotekami PDF ali pogledati, kaj imate shranjeno iz EPUB in FB2, lahko preprosto zaženete zahtevo

vitis show Format/MOBI u: Format/FB2

Zgodilo se je, da mi standardna orodja GNU/Linux, kot sta file ali mimetype, niso ustrezala ravno zato, ker ne določijo vedno pravilno formata, zato sem moral narediti lastno implementacijo na osnovi podpisov in končnic datotek. Na splošno je tema definiranja formatov datotek zanimiva tema za raziskovanje in si zasluži ločen članek. Zaenkrat lahko rečem, da morda še nisem poskrbel za pravo prepoznavnost vseh formatov na svetu, a na splošno že dobro deluje. Res je, EPUB zdaj format definira kot ZIP (na splošno je to upravičeno, vendar v praksi to ne bi smelo veljati za normalno vedenje). Zaenkrat menite, da je ta funkcija eksperimentalna in prijavite morebitne napake. V nenavadnih situacijah lahko vedno uporabite kategorije pripone datotek, na primer Pripona/epub.

Če so omogočene samodejne kategorije glede na format, so omogočene tudi avtokategorije, ki združujejo nekatere formate glede na vrsto: »Arhivi«, »Slike«, »Video«, »Avdio« in »Dokumenti«. Za te podkategorije bodo izdelana tudi lokalizirana imena.

Kaj ni povedano

vnetje Izkazalo se je, da je zelo večplastno orodje in težko je zajeti vse naenkrat. Naj na kratko omenim, kaj še lahko storite:

  • kategorije je mogoče izbrisati in odstraniti iz datotek;
  • rezultate izraznih poizvedb je mogoče kopirati v navedeni imenik;
  • datoteke se lahko izvajajo kot programi;
  • Ukaz show ima veliko možnosti, na primer razvrščanje po imenu/datumu spremembe ali dostopu/velikosti/razširitvi, prikaz lastnosti datoteke in poti do izvirnikov, omogočanje prikaza skritih datotek itd.;
  • Ko shranite povezave do internetnih virov, lahko shranite tudi lokalne kopije strani HTML.

Vse podrobnosti najdete v uporabniški pomoči.

Obeti

Skeptiki pogosto pravijo, da "teh oznak ne bo nihče nastavil sam." Na lastnem primeru lahko dokažem nasprotno: kategoriziral sem že več kot šest tisoč datotek, ustvaril več kot tisoč kategorij in vzdevkov, in bilo je vredno. Ko ena ekipa vitis open План odprite svoj seznam opravil ali ko z enim ukazom vitis open LaTeX Ko odprete knjigo Stolyarova o sistemu postavitve LaTeX, je že moralno težko uporabljati datotečni sistem »na staromoden način«.

Na tej podlagi se porajajo številne ideje. Na primer, lahko naredite samodejni radio, ki vklopi tematsko glasbo glede na trenutno vreme, praznik, dan v tednu, čas dneva ali leto. Še bližje temi je predvajalnik glasbe, ki pozna kategorije in zna predvajati glasbo po izrazu z operacijami na kategorijah kot na nizih. Koristno je narediti demon, ki bo spremljal imenik "Prenosi" in ponujal kategorizacijo novih datotek. In seveda bi morali narediti običajnega grafičnega semantičnega upravitelja datotek. Nekoč sem celo ustvaril spletno storitev za podjetje za skupno uporabo datotek, vendar ni bila prioriteta in je postala nepomembna, čeprav je dosegla visoko stopnjo zmogljivosti. (Zaradi večjih sprememb v vnetje, ni več uporabno.)

tukaj je majhen demo

Kategorije namesto imenikov ali Semantični datotečni sistem za Linux

Zaključek

vitis ni prvi poskus radikalne spremembe načina dela s podatki, vendar se mi je zdelo pomembno, da uresničim svoje ideje in dam izvedbo javno dostopno pod licenco GNU GPL. Za udobje je bil narejen paket deb za x86-64; deloval bi moral na vseh sodobnih distribucijah Debian. Pri ARM so bile manjše težave (medtem ko so vsi drugi programi, povezani z vnetje, deluje dobro), vendar bo v prihodnosti za to platformo sestavljen delovni paket (armhf). Zaenkrat sem prenehal ustvarjati pakete RPM zaradi težav na Fedori 30 in težav pri širjenju po številnih distribucijah RPM, vendar bodo poznejši paketi še vedno izdelani za vsaj nekaj izmed njih. Medtem lahko uporabite make && make install ali checkinstall.

Hvala vsem za pozornost! Upam, da bosta ta članek in ta projekt lahko koristna.

Povezava do repozitorija projektov

Vir: www.habr.com

Dodaj komentar