Kategorijos vietoj katalogų arba Semantinė failų sistema Linux

Pati duomenų klasifikacija yra įdomi tyrimo tema. Man patinka rinkti informaciją, kuri atrodo reikalinga, ir visada stengiausi sukurti logines katalogų hierarchijas savo failams, o vieną dieną sapne pamačiau gražią ir patogią programą, skirtą failams priskirti žymes, ir nusprendžiau, kad negaliu gyventi. kaip šitaip ilgiau.

Hierarchinių failų sistemų problema

Vartotojai dažnai susiduria su problema pasirenkant, kur išsaugoti kitą naują failą, ir rasti savo failus (kartais failų pavadinimai visai nėra skirti, kad žmogus įsimintų).

Išeitis iš situacijos gali būti semantinės failų sistemos, kurios dažniausiai yra tradicinės failų sistemos priedas. Juose esantys katalogai pakeičiami semantiniais atributais, dar vadinamais žymomis, kategorijomis ir metaduomenimis. Dažniau vartosiu terminą „kategorija“, nes... Failų sistemų kontekste žodis „tag“ kartais būna kiek keistas, ypač kai atsiranda „subtags“ ir „tag aliases“.

Kategorijų priskyrimas failams iš esmės pašalina failo saugojimo ir paieškos problemą: jei prisiminsite (arba atspėsite) bent vieną iš failui priskirtų kategorijų, failas niekada nedings iš peržiūros.

Anksčiau ši tema ne kartą buvo iškelta Habré (laikas, два, trys, keturi ir tt), čia aprašysiu savo sprendimą.

Kelias į Realizaciją

Iš karto po minėto sapno savo sąsiuvinyje aprašiau komandų sąsają, kuri suteikia reikiamą darbą su kategorijomis. Tada nusprendžiau, kad per savaitę ar dvi galėsiu parašyti prototipą naudodamas Python arba Bash, o tada turėsiu kurti grafinį apvalkalą Qt arba GTK. Realybė, kaip visada, pasirodė daug atšiauresnė, o plėtra vėlavo.

Pirminė idėja buvo pirmiausia sukurti programą su patogia ir glausta komandų eilutės sąsaja, kuri sukurtų, ištrintų kategorijas, priskirtų kategorijas failams ir ištrintų kategorijas iš failų. Paskambinau į programą vitas.

Pirmas bandymas kurti vitas baigėsi niekuo, nes daug laiko buvo pradėta skirti darbui ir koledžui. Antras bandymas jau buvo kažkas: magistro darbui pavyko užbaigti suplanuotą projektą ir net pagaminti GTK apvalkalo prototipą. Tačiau ta versija pasirodė tokia nepatikima ir nepatogi, kad teko daug ką permąstyti.

Trečią versiją iš tikrųjų pats naudojau labai ilgai, kelis tūkstančius savo failų perkėlęs į kategorijas. Tai labai palengvino ir įgyvendintas bash užbaigimas. Tačiau kai kurios problemos, tokios kaip automatinių kategorijų trūkumas ir galimybė saugoti to paties pavadinimo failus, vis tiek išliko, o programa jau buvo sulenkta pagal savo sudėtingumą. Taip atėjau iki būtinybės spręsti sudėtingas programinės įrangos kūrimo problemas: parašyti išsamius reikalavimus, sukurti funkcinio testavimo sistemą, studijuoti pakavimo instrukcijas ir dar daugiau. Dabar priėjau prie savo plano, kad šis kuklus kūrinys būtų pristatytas laisvai bendruomenei. Specifinis failų valdymas, pvz., valdymas per kategorijų koncepciją, iškelia netikėtų problemų ir problemų, ir jas sprendžiant vitas sukūrė dar penkis projektus, kai kurie iš jų bus paminėti straipsnyje. Iki dabar vitas Grafinio apvalkalo neįsigijau, bet patogumas naudoti failų kategorijas iš komandinės eilutės man jau nusveria bet kokius įprastos grafinių failų tvarkyklės privalumus.

Naudojimo pavyzdžiai

Pradėkime paprastai – sukurkite kategoriją:

vitis create Музыка

Kaip pavyzdį pridėkime tam tikrą kompoziciją:

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

Kategorijos „Muzika“ turinį galite peržiūrėti naudodami subkomandą „show“:

vitis show Музыка

Galite žaisti naudodami antrinę komandą „atidaryti“.

vitis open Музыка

Nes Jei kategorijoje „Muzika“ turime tik vieną failą, bus paleistas tik tas. Norėdami atidaryti failus su numatytosiomis programomis, sukūriau atskirą įrankį vts-fs-open (standartiniai įrankiai, tokie kaip xdg-open arba mimeopen, man netiko dėl daugelio priežasčių; bet jei ką, nustatymuose galite nurodyti kitą universalaus failo atidarymo įrankį). Ši programa gerai veikia skirtinguose platinimuose su skirtingomis darbo aplinkomis, todėl rekomenduoju ją įdiegti kartu su vitis.

Taip pat galite tiesiogiai nurodyti failų atidarymo programą:

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

Kategorijos vietoj katalogų arba Semantinė failų sistema Linux

Sukurkime daugiau kategorijų ir pridėkime failus naudodami „priskirti“. Jei failai priskirti kategorijoms, kurių dar nėra, būsite paraginti jas sukurti. Nereikalingos užklausos galima išvengti naudojant -yes vėliavėlę.

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

Dabar norime pridėti kategoriją „Matematika“ prie failo „Statistinis paketas R: tikimybių teorija ir matematinė statistika.pdf“. Žinome, kad šis failas jau priskirtas kategorijai "R", todėl galime naudoti kategorijos kelią iš Vitis sistemos:

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

Laimei, „bash“ užbaigimas tai palengvina.

Pažiūrėkime, kas atsitiko, naudodami žymą --categories, kad pamatytumėte kiekvieno failo kategorijų sąrašą:

vitis show R --categories

Kategorijos vietoj katalogų arba Semantinė failų sistema Linux

Atminkite, kad failai taip pat buvo automatiškai suskirstyti į kategorijas pagal formatą, tipą (sujungia formatus) ir failo plėtinį. Jei pageidaujama, šias kategorijas galima išjungti. Vėliau tikrai lokalizuosiu jų vardus.

Prie „matematikos“ pridėkime dar kai ką, kad būtų įvairovė:

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

O dabar viskas darosi įdomiai. Vietoj kategorijų galite rašyti išraiškas su jungimo, sankirtos ir atimties operacijomis, ty naudoti aibių operacijas. Pavyzdžiui, susikirtus „Math“ su „R“, bus sukurtas vienas failas.

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

Iš „matematikos“ atimkime nuorodas į kalbą „R“:

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

Mes galime be tikslo derinti muziką ir R kalbą:

vitis show Музыка u: R

Vėliava -n leidžia „ištraukti“ reikalingus failus iš užklausos rezultato pagal skaičius ir (arba) diapazonus, pavyzdžiui, -n 3-7, arba kažkas sudėtingesnio: -n 1,5,8-10,13. Tai dažnai naudinga naudojant atvirą antrinę komandą, kuri leidžia atidaryti norimus failus iš sąrašo.

Kategorijos vietoj katalogų arba Semantinė failų sistema Linux

Nors mes nebenaudojame įprastos katalogų hierarchijos, dažnai naudinga turėti įdėtas kategorijas. Kategorijoje „Matematika“ sukurkime subkategoriją „Statistika“ ir pridėkite šią kategoriją prie atitinkamo failo:

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

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

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

Kategorijos vietoj katalogų arba Semantinė failų sistema Linux

Matome, kad šiame faile dabar yra kategorija „Matematika/Statistika“, o ne „Matematika“ (sekamos papildomos nuorodos).

Kreiptis į visą kelią gali būti nepatogu, sukurkime „pasaulinį“ slapyvardį:

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

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

Kategorijos vietoj katalogų arba Semantinė failų sistema Linux

Ne tik įprasti failai

Interneto nuorodos

Norint suvienodinti bet kokios informacijos saugojimą, būtų naudinga bent jau suskirstyti nuorodas į interneto išteklius. Ir tai įmanoma:

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

Failas su HTML puslapio antrašte ir .desktop plėtiniu bus sukurtas specialioje vietoje. Tai tradicinis sparčiųjų klavišų formatas GNU/Linux. Tokie spartieji klavišai automatiškai priskiriami tinklo žymių kategorijai.

Natūralu, kad nuorodos yra sukurtos naudoti:

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

Vykdant komandą naujai išsaugota nuoroda atidaroma naršyklėje. Suskirstytos į kategorijas interneto šaltinių nuorodos gali būti naudojamos kaip naršyklės žymių pakaitalas.

Failų fragmentai

Taip pat naudinga turėti atskirų failų dalių kategorijas. Neblogas prašymas, tiesa? Tačiau dabartinis įgyvendinimas iki šiol veikia tik paprasto teksto failus, garso ir vaizdo failus. Tarkime, reikia pažymėti tam tikrą koncerto dalį ar juokingą filmo akimirką, tada naudojant assign galima naudoti vėliavėles -fragname, -start, -finish. Išsaugokime ekrano užsklandą iš DuckTales:

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

vitis open Заставки

Tiesą sakant, failas nepjaustomas, o sukuriamas rodyklės failas į fragmentą, kuriame aprašomas failo tipas, kelias į failą, fragmento pradžia ir pabaiga. Nuorodų į fragmentus kūrimas ir atidarymas yra pavestas komunalinėms paslaugoms, kurias specialiai sukūriau šiems tikslams - tai mediafragmenter ir fragplayer. Pirmasis sukuria, antrasis atidaromas. Garso ir vaizdo įrašų atveju medijos failas paleidžiamas iš tam tikros į tam tikrą vietą naudojant VLC grotuvą, todėl jis taip pat turi būti sistemoje. Iš pradžių norėjau tai padaryti remdamasis mplayer, bet kažkodėl tai buvo labai kreiva su pozicionavimu reikiamu momentu.
Mūsų pavyzdyje sukuriamas failas „Duck Tales intro.fragpointer“ (jis patalpinamas specialioje vietoje), o tada atkuriamas fragmentas nuo failo pradžios (nes kuriant nebuvo nurodyta --start) iki 59 sekundžių žymos, po kurio VLC užsidaro .

Kitas pavyzdys, kai nusprendėme priskirti vieną pasirodymą garsaus atlikėjo koncerte:

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

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

Atidarius failas bus įtrauktas į norimą padėtį ir užsidarys po keturių su puse minutės.

Kaip visa tai veikia + papildomos funkcijos

Kategorijų saugojimas

Pačioje pradžioje galvojant apie semantinės failų sistemos organizavimą į galvą atėjo trys būdai: per simbolinių nuorodų saugojimą, per duomenų bazę, per aprašymą XML. Pirmasis metodas laimėjo, nes... viena vertus, tai lengva įdiegti, kita vertus, vartotojas turi galimybę peržiūrėti kategorijas tiesiai iš failų sistemos (ir tai patogu ir svarbu). Naudojimo pradžioje vitas „Vitis“ katalogas ir „.config/vitis/vitis.conf“ konfigūracijos failas sukuriami vartotojo namų kataloge. Katalogai, atitinkantys kategorijas, kuriami ~/Vitis, o šiuose kategorijų kataloguose sukuriamos simbolinės nuorodos į originalius failus. Kategorijų slapyvardžiai taip pat yra tik nuorodos į juos. Žinoma, „Vitis“ katalogo buvimas namų kataloge gali netikti kai kuriems žmonėms. Galime persijungti į bet kurią kitą vietą:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

Tam tikru momentu tampa aišku, kad nėra prasmės skirstyti į kategorijas įvairiose vietose esančius failus, nes jų vieta gali keistis. Todėl pirmiausia sukūriau sau katalogą, kuriame kvailai viską išmečiau ir suskirstiau visas kategorijas. Tada nusprendžiau, kad būtų puiku šį momentą įforminti programos lygmeniu. Taip atsirado „failų erdvės“ sąvoka. Naudojimo pradžioje vitas Nepakenktų iš karto nustatyti tokią vietą (ten bus saugomi visi reikalingi failai) ir įjungti automatinį išsaugojimą:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Be automatinio išsaugojimo, naudojant subkomandą "priskirti", jei norite įrašyti pridėtą failą į failų erdvę, reikės žymos --save.

Be to, galite pridėti keletą failų erdvių ir pakeisti jų prioritetus; tai gali būti naudinga, kai failų yra daug ir jie saugomi skirtingose ​​laikmenose. Šios galimybės čia nesvarstysiu, daugiau informacijos rasite programos žinyne.

Semantinės failų sistemos perkėlimas

Šiaip ar taip, Vitis katalogas ir failų erdvės teoriškai kartais gali judėti iš vienos vietos į kitą. Kad tai veiktų, sukūriau atskirą priemonę nuorodų redaktorius, kuris gali masiškai redaguoti nuorodas, pakeisdamas kelio dalis kitomis:

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

Pirmuoju atveju, kai perkeliame iš /mnt/MyFavoriteDisk/Vitis/ į pagrindinį katalogą, su slapyvardžiais susietos simbolinės nuorodos yra redaguojamos. Antruoju atveju, pakeitus failų erdvės vietą, visos Vitis nuorodos keičiamos į naujas pagal prašymą pakeisti dalį jų kelio.

Automatinės kategorijos

Jei paleisite komandą vitis service get autocategorization, galite matyti, kad pagal numatytuosius nustatymus automatinės kategorijos priskiriamos pagal formatą (Formatas ir tipas) ir failo plėtinį (Plėtinys).

Tai naudinga, kai, pavyzdžiui, reikia rasti ką nors tarp PDF arba pažiūrėti, ką išsaugojote iš EPUB ir FB2, galite tiesiog paleisti užklausą

vitis show Format/MOBI u: Format/FB2

Taip atsitiko, kad standartiniai GNU/Linux įrankiai, tokie kaip failas ar mime tipas, man netiko būtent todėl, kad jie ne visada teisingai nustato formatą; turėjau sukurti savo diegimą, pagrįstą failų parašais ir plėtiniais. Apskritai failų formatų apibrėžimo tema yra įdomi tyrimo tema ir nusipelno atskiro straipsnio. Kol kas galiu pasakyti, kad galbūt nesuteikiau tikro pripažinimo visiems formatams pasaulyje, bet apskritai jis jau veikia gerai. Tiesa, dabar EPUB formatą apibrėžia kaip ZIP (apskritai tai pateisinama, tačiau praktiškai tai neturėtų būti laikoma normaliu elgesiu). Kol kas laikykite šią funkciją eksperimentine ir praneškite apie visas klaidas. Keistose situacijose visada galite naudoti failų plėtinių kategorijas, pavyzdžiui, plėtinys / epub.

Jei įjungtos automatinės kategorijos pagal formatą, taip pat įjungiamos automatinės kategorijos, sugrupuojančios kai kuriuos formatus pagal tipą: „Archyvai“, „Paveikslėliai“, „Vaizdo įrašas“, „Garsas“ ir „Dokumentai“. Šioms subkategorijoms taip pat bus sukurti lokalizuoti pavadinimai.

Kas nepasakyta

vitas Paaiškėjo, kad tai labai įvairiapusė priemonė, kurią sunku aprėpti iš karto. Leiskite trumpai paminėti, ką dar galite padaryti:

  • kategorijas galima ištrinti ir pašalinti iš failų;
  • išraiškos užklausų rezultatus galima nukopijuoti į nurodytą katalogą;
  • failus galima paleisti kaip programas;
  • Show komanda turi daug parinkčių, pavyzdžiui, rūšiavimas pagal pavadinimą/keitimo datą arba prieigą/dydį/plėtimą, failo savybių ir kelių iki originalų rodymas, paslėptų failų rodymo įjungimas ir pan.;
  • Išsaugodami nuorodas į interneto šaltinius, taip pat galite išsaugoti vietines HTML puslapių kopijas.

Visą informaciją galite rasti vartotojo žinyne.

Перспективы

Skeptikai dažnai sako, kad „niekas pats nenustatys šių žymų“. Savo pavyzdžiu galiu įrodyti priešingai: jau suskirstiau į kategorijas daugiau nei šešis tūkstančius failų, sukūriau daugiau nei tūkstantį kategorijų ir slapyvardžių, ir tai buvo verta. Kai viena komanda vitis open План atidaryti savo darbų sąrašą arba kai su viena komanda vitis open LaTeX Atsivertus Stolyarovo knygą apie LaTeX išdėstymo sistemą, jau morališkai sunku naudoti failų sistemą „senamadiškai“.

Tuo remiantis kyla nemažai idėjų. Pavyzdžiui, galite sukurti automatinį radiją, kuri įjungia teminę muziką pagal dabartinį orą, šventę, savaitės dieną, paros ar metų laiką. Dar arčiau temos yra muzikos grotuvas, kuris žino apie kategorijas ir gali leisti muziką išraiška, atlikdamas operacijas su kategorijomis kaip su rinkiniais. Naudinga pasidaryti demoną, kuris stebės katalogą „Atsisiuntimai“ ir siūlys suskirstyti naujus failus į kategorijas. Ir, žinoma, turėtume sukurti įprastą grafinių semantinių failų tvarkyklę. Kažkada net sukūriau įmonei žiniatinklio paslaugą, skirtą kolektyviniam failų naudojimui, tačiau tai nebuvo prioritetas ir tapo neaktualu, nors pasiekė aukštą našumo lygį. (Dėl didelių pokyčių vitas, jis nebenaudojamas.)

štai maža demonstracinė versija

Kategorijos vietoj katalogų arba Semantinė failų sistema Linux

išvada

vitas nėra pirmas bandymas kardinaliai pakeisti darbo su duomenimis stilių, bet man atrodė svarbu įgyvendinti savo idėjas ir padaryti įgyvendinimą viešai prieinamą pagal GNU GPL licenciją. Patogumui buvo sukurtas deb paketas, skirtas x86-64; jis turėtų veikti visuose šiuolaikiniuose Debian platinimuose. ARM buvo nedidelių sunkumų (o visos kitos programos buvo susijusios su vitas, veikia gerai), tačiau ateityje šiai platformai (armhf) bus sudarytas darbinis paketas. Kol kas nustojau kurti RPM paketus dėl „Fedora 30“ problemų ir sunkumų plisti daugelyje RPM paskirstymų, tačiau vėlesni paketai vis tiek bus sukurti bent kelioms iš jų. Tuo tarpu galite naudoti make && make install arba checkinstall.

Ačiū visiems už dėmesį! Tikiuosi, kad šis straipsnis ir šis projektas bus naudingi.

Nuoroda į projekto saugyklą

Šaltinis: www.habr.com

Добавить комментарий