Kategorije umjesto direktorija, ili Semantički datotečni sustav za Linux

Sama klasifikacija podataka zanimljiva je istraživačka tema. Volim prikupljati informacije koje se čine potrebnima i uvijek sam pokušavao stvoriti logičnu hijerarhiju direktorija za svoje datoteke, a jednog sam dana u snu vidio prekrasan i praktičan program za dodjeljivanje oznaka datotekama i odlučio sam da ne mogu živjeti više ovako.

Problem hijerarhijskih datotečnih sustava

Korisnici se često suočavaju s problemom odabira mjesta na kojem će spremiti sljedeću novu datoteku i problemom pronalaženja vlastitih datoteka (ponekad imena datoteka uopće nisu namijenjena da ih osoba zapamti).

Izlaz iz situacije mogu biti semantički datotečni sustavi, koji su obično dodatak tradicionalnom datotečnom sustavu. Direktoriji u njima zamijenjeni su semantičkim atributima, koji se također nazivaju oznakama, kategorijama i metapodacima. Češće ću koristiti izraz „kategorija“, jer... U kontekstu datotečnih sustava, riječ "tag" je ponekad pomalo čudna, pogotovo kada se pojavljuju "subtags" i "tag aliases".

Dodjeljivanje kategorija datotekama uvelike uklanja problem pohranjivanja i traženja datoteke: ako se sjetite (ili pogodite) barem jedne kategorije dodijeljene datoteci, datoteka nikada neće nestati iz prikaza.

Prethodno je ova tema pokrenuta više puta na Habréu (vrijeme, два, tri, četiri itd.), ovdje opisujem svoje rješenje.

Put do Ostvarenja

Odmah nakon spomenutog sna opisao sam u svojoj bilježnici naredbeno sučelje koje omogućuje potreban rad s kategorijama. Tada sam odlučio da za tjedan ili dva mogu napisati prototip koristeći Python ili Bash, a onda ću morati raditi na stvaranju grafičke ljuske u Qt-u ili GTK-u. Stvarnost se, kao i uvijek, pokazala mnogo surovijom, a razvoj je kasnio.

Izvorna ideja je bila prije svega napraviti program sa praktičnim i sažetim sučeljem naredbenog retka koji bi kreirao, brisao kategorije, dodjeljivao kategorije datotekama i brisao kategorije iz datoteka. Nazvao sam program upala.

Prvi pokušaj stvaranja upala završila ničim, budući da se puno vremena počelo trošiti na posao i fakultet. Drugi pokušaj je već bio nešto: za magistarski rad uspio sam dovršiti planirani projekt i čak napraviti prototip GTK školjke. Ali ta se verzija pokazala toliko nepouzdanom i nezgodnom da se mnogo toga moralo promisliti.

Ja sam zapravo jako dugo koristio treću verziju, prebacivši nekoliko tisuća svojih datoteka u kategorije. Ovo je također uvelike olakšano implementiranim bash dovršavanjem. Ali neki problemi, poput nedostatka automatskih kategorija i mogućnosti pohranjivanja istoimenih datoteka, i dalje su ostali, a program je već bio savijen pod vlastitom složenošću. Tako sam došao do potrebe rješavanja složenih problema razvoja softvera: napisati detaljne zahtjeve, razviti sustav za funkcionalno testiranje, proučiti upute za pakiranje i još mnogo toga. Sada sam došao do svog plana, tako da se ova skromna kreacija može predstaviti slobodnoj zajednici. Specifično upravljanje datotekama kao što je upravljanje kroz koncept kategorija postavlja neočekivana pitanja i probleme, au njihovom rješavanju upala oko sebe iznjedrio još pet projekata od kojih ćemo neke spomenuti u članku. Do sada upala Nisam kupio grafičku ljusku, ali praktičnost korištenja kategorija datoteka iz naredbenog retka za mene već nadmašuje sve prednosti običnog grafičkog upravitelja datotekama.

Primjeri upotrebe

Počnimo jednostavno - stvorite kategoriju:

vitis create Музыка

Dodajmo mu malo kompozicije kao primjer:

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

Sadržaj kategorije “Glazba” možete pogledati pomoću podnaredbe “show”:

vitis show Музыка

Možete ga igrati pomoću podnaredbe "open".

vitis open Музыка

Jer Ako imamo samo jednu datoteku u kategoriji "Glazba", pokrenut će se samo ona. U svrhu otvaranja datoteka s njihovim zadanim programima napravio sam poseban pomoćni program vts-fs-otvoreno (standardni alati poput xdg-open ili mimeopen nisu mi odgovarali iz više razloga; ali, ako ništa drugo, u postavkama možete odrediti neki drugi uslužni program za univerzalno otvaranje datoteka). Ovaj uslužni program dobro radi na različitim distribucijama s različitim radnim okruženjima, stoga preporučujem da ga instalirate zajedno s vitisom.

Također možete izravno odrediti program za otvaranje datoteka:

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

Kategorije umjesto direktorija, ili Semantički datotečni sustav za Linux

Stvorimo još kategorija i dodajmo datoteke pomoću "dodijeli". Ako su datoteke dodijeljene kategorijama koje još ne postoje, od vas će se tražiti da ih izradite. Nepotreban zahtjev se može izbjeći korištenjem oznake -yes.

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

Sada želimo dodati kategoriju “Matematika” u datoteku “Statistički paket R: teorija vjerojatnosti i matematička statistika.pdf”. Znamo da je ova datoteka već kategorizirana kao "R" i stoga možemo koristiti put kategorije iz Vitis sustava:

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

Srećom, bash dovršavanje ovo olakšava.

Da vidimo što se dogodilo, koristeći zastavu --categories da vidimo popis kategorija za svaku datoteku:

vitis show R --categories

Kategorije umjesto direktorija, ili Semantički datotečni sustav za Linux

Imajte na umu da su datoteke također automatski kategorizirane prema formatu, vrsti (kombinira formate) i ekstenziji datoteke. Ove se kategorije po želji mogu onemogućiti. Kasnije ću svakako lokalizirati njihova imena.

Dodajmo još nešto "Matematici" za raznolikost:

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

A sada stvari postaju zanimljive. Umjesto kategorija, možete pisati izraze s operacijama unije, presjeka i oduzimanja, odnosno koristiti operacije na skupovima. Na primjer, križanje "Math" s "R" rezultirat će jednom datotekom.

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

Oduzmimo reference na jezik "R" od "matematike":

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

Možemo besciljno kombinirati glazbu i R jezik:

vitis show Музыка u: R

Oznaka -n omogućuje vam da "izvučete" potrebne datoteke iz rezultata zahtjeva prema brojevima i/ili rasponima, na primjer, -n 3-7, ili nešto kompliciranije: -n 1,5,8-10,13. Često je korisno s podnaredbom open, koja vam omogućuje otvaranje željenih datoteka s popisa.

Kategorije umjesto direktorija, ili Semantički datotečni sustav za Linux

Iako se udaljavamo od upotrebe konvencionalne hijerarhije imenika, često je korisno imati ugniježđene kategorije. Kreirajmo potkategoriju "Statistika" pod kategorijom "Matematika" i dodajmo ovu kategoriju u odgovarajuću datoteku:

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

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

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

Kategorije umjesto direktorija, ili Semantički datotečni sustav za Linux

Vidimo da ova datoteka sada ima kategoriju "Matematika/Statistika" umjesto "Matematika" (prate se dodatne veze).

Adresiranje punog puta može biti nezgodno, stvorimo "globalni" alias:

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

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

Kategorije umjesto direktorija, ili Semantički datotečni sustav za Linux

Ne samo obične datoteke

Internet poveznice

Za objedinjavanje pohranjivanja bilo kakvih informacija, bilo bi korisno barem kategorizirati poveznice na internetske izvore. I ovo je moguće:

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

Na posebnom mjestu kreirat će se datoteka sa zaglavljem HTML stranice i ekstenzijom .desktop. Ovo je tradicionalni format prečaca u GNU/Linuxu. Takvi se prečaci automatski kategoriziraju kao mrežne oznake.

Naravno, prečaci su stvoreni da se koriste:

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

Izvođenje naredbe uzrokuje otvaranje novospremljene veze u pregledniku. Kategorizirani prečaci do internetskih izvora mogu poslužiti kao zamjena za oznake preglednika.

Fragmenti datoteke

Također je korisno imati kategorije za pojedinačne dijelove datoteka. Nije loš zahtjev, ha? No trenutna implementacija do sada utječe samo na obične tekstualne datoteke, audio i video datoteke. Recimo da trebate označiti određeni dio koncerta ili smiješan trenutak u filmu, a zatim kada koristite dodjelu možete koristiti zastavice -fragname, -start, -finish. Spremimo screensaver iz "DuckTales":

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

vitis open Заставки

U stvarnosti ne dolazi do rezanja datoteke; umjesto toga stvara se datoteka pokazivača na fragment, koja opisuje vrstu datoteke, put do datoteke, početak i kraj fragmenta. Stvaranje i otvaranje pokazivača na fragmente delegirano je uslužnim programima koje sam posebno napravio za te svrhe - to su mediafragmenter i fragplayer. Prvi stvara, drugi otvara. Kod audio i video zapisa medijska datoteka se pomoću VLC playera pokreće s određene na određenu poziciju, tako da i ona mora biti u sustavu. Isprva sam to želio napraviti na temelju mplayera, ali iz nekog razloga bilo je vrlo krivo s pozicioniranjem u pravom trenutku.
U našem primjeru kreira se datoteka “Duck Tales intro.fragpointer” (smješta se na posebno mjesto), a zatim se reproducira fragment od početka datoteke (budući da –start nije navedeno prilikom kreiranja) do 59 druga oznaka, nakon čega se VLC zatvara.

Drugi primjer je kada smo odlučili kategorizirati jedan nastup na koncertu poznatog umjetnika:

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

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

Kada se otvori, datoteka će biti uključena na željeno mjesto i zatvorit će se nakon četiri i pol minute.

Kako sve to radi + dodatne značajke

Pohranjivanje kategorija

Na samom početku razmišljanja o organiziranju semantičkog datotečnog sustava padala su na pamet tri načina: kroz pohranjivanje simboličkih veza, kroz bazu podataka, kroz opis u XML-u. Prva metoda je pobijedila, jer... s jedne strane, lako ga je implementirati, a s druge strane, korisnik ima priliku pogledati kategorije izravno iz datotečnog sustava (a to je zgodno i važno). Na početku korištenja upala Direktorij "Vitis" i konfiguracijska datoteka ".config/vitis/vitis.conf" stvaraju se u početnom direktoriju korisnika. Direktoriji koji odgovaraju kategorijama kreiraju se u ~/Vitis, a simboličke veze na izvorne datoteke kreiraju se u tim direktorijima kategorija. Aliasi kategorija također su samo poveznice na njih. Naravno, prisutnost imenika "Vitis" u matičnom imeniku možda neće odgovarati nekima. Možemo se prebaciti na bilo koju drugu lokaciju:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

U određenom trenutku postaje jasno da nema smisla kategorizirati datoteke razbacane na različitim mjestima, jer se njihova lokacija može mijenjati. Stoga sam za početak napravio imenik za sebe, gdje sam sve glupo bacio i dao sve kategorije. Tada sam odlučio da bi bilo lijepo formalizirati ovaj trenutak na programskoj razini. Tako se pojavio koncept "datotečnog prostora". Na početku korištenja upala Ne bi škodilo odmah postaviti takvo mjesto (tamo će biti pohranjene sve datoteke koje su nam potrebne) i omogućiti automatsko spremanje:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Bez automatskog spremanja, kada koristite podnaredbu "assign", bit će potrebna oznaka --save ako želite spremiti dodanu datoteku u prostor za datoteke.

Štoviše, možete dodati nekoliko prostora datoteka i promijeniti im prioritete; ovo može biti korisno kada postoji mnogo datoteka i one su pohranjene na različitim medijima. Tu mogućnost neću razmatrati ovdje; pojedinosti se mogu pronaći u pomoći programa.

Semantička migracija sustava datoteka

U svakom slučaju, direktorij Vitis i prostori datoteka teoretski se ponekad mogu pomicati s mjesta na mjesto. Da bi to funkcioniralo, stvorio sam poseban uslužni program uređivač poveznica, koji može skupno uređivati ​​veze, zamjenjujući dijelove staze s drugima:

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

U prvom slučaju, nakon što smo se pomaknuli iz /mnt/MyFavoriteDisk/Vitis/ u početni direktorij, uređuju se simboličke veze povezane s aliasima. U drugom slučaju, nakon promjene lokacije prostora datoteke, sve veze u Vitisu mijenjaju se u nove u skladu sa zahtjevom za zamjenom dijela njihove staze.

Automatske kategorije

Ako pokrenete naredbu vitis service get autocategorization, možete vidjeti da su prema zadanim postavkama automatske kategorije dodijeljene prema formatu (Format i vrsta) i ekstenziji datoteke (Ekstenzija).

Ovo je korisno kada, na primjer, trebate pronaći nešto među PDF-ovima ili pogledati što ste pohranili iz EPUB-a i FB2-a, možete jednostavno pokrenuti zahtjev

vitis show Format/MOBI u: Format/FB2

Slučajno mi se dogodilo da mi standardni GNU/Linux alati kao što su file ili mimetype nisu odgovarali upravo zato što ne određuju uvijek točno format; morao sam napraviti vlastitu implementaciju na temelju potpisa i ekstenzija datoteka. Općenito, tema definiranja formata datoteka je zanimljiva tema za istraživanje i zaslužuje poseban članak. Za sada mogu reći da možda nisam omogućio pravo prepoznavanje za sve formate u svijetu, ali općenito već dobro funkcionira. Istina, EPUB sada definira format kao ZIP (općenito je to opravdano, ali u praksi se to ne bi trebalo smatrati normalnim ponašanjem). Za sada ovu značajku smatrajte eksperimentalnom i prijavite sve greške. U čudnim situacijama uvijek možete koristiti kategorije ekstenzija datoteka, na primjer, ekstenzija/epub.

Ako su omogućene autokategorije prema formatu, omogućene su i autokategorije koje grupiraju neke formate prema tipu: “Arhivi”, “Slike”, “Video”, “Audio” i “Dokumenti”. Za ove potkategorije također će biti napravljena lokalizirana imena.

Što se ne kaže

upala Pokazalo se da je to vrlo višestruk alat i teško je pokriti sve odjednom. Dopustite mi da ukratko spomenem što još možete učiniti:

  • kategorije se mogu brisati i uklanjati iz datoteka;
  • rezultati izraznih upita mogu se kopirati u navedeni direktorij;
  • datoteke se mogu pokretati kao programi;
  • Naredba prikaži ima mnogo opcija, na primjer, sortiranje prema nazivu/datumu izmjene ili pristupu/veličini/ekstenziji, prikazivanje svojstava datoteke i staza do originala, omogućavanje prikaza skrivenih datoteka itd.;
  • Kada spremate veze na internetske izvore, možete spremati i lokalne kopije HTML stranica.

Sve pojedinosti mogu se pronaći u korisničkoj pomoći.

Planovi

Skeptici često kažu da "nitko neće sam postaviti te oznake." Na vlastitom primjeru mogu dokazati suprotno: već sam kategorizirao više od šest tisuća datoteka, napravio više od tisuću kategorija i aliasa, i isplatilo se. Kad jedna ekipa vitis open План otvorite svoj popis obaveza ili kada jednom naredbom vitis open LaTeX Kada otvorite Stolyarovljevu knjigu o LaTeX sustavu rasporeda, već je moralno teško koristiti sustav datoteka "na staromodan način".

Na temelju toga rađaju se brojne ideje. Na primjer, možete napraviti automatski radio koji uključuje tematsku glazbu prema trenutnom vremenu, prazniku, danu u tjednu, dobu dana ili godine. Još bliže temi je glazbeni player koji poznaje kategorije i može reproducirati glazbu prema izrazu s operacijama na kategorijama kao na setovima. Korisno je napraviti demon koji će nadzirati direktorij "Downloads" i nuditi kategorizaciju novih datoteka. I, naravno, trebali bismo napraviti normalan grafički semantički upravitelj datoteka. Jednom davno sam čak napravio web servis za poduzeće za kolektivno korištenje datoteka, ali nije bio prioritet i postao je nebitan, iako je postigao visoku razinu performansi. (Zbog velikih promjena u upala, više nije za upotrebu.)

evo mali demo

Kategorije umjesto direktorija, ili Semantički datotečni sustav za Linux

Zaključak

vitis nije prvi pokušaj radikalne promjene stila rada s podacima, ali smatrao sam važnim implementirati svoje ideje i učiniti implementaciju javno dostupnom pod GNU GPL licencom. Radi praktičnosti, deb paket je napravljen za x86-64; trebao bi raditi na svim modernim Debian distribucijama. Bilo je manjih poteškoća na ARM-u (dok su svi ostali programi vezani za upala, rade dobro), ali u budućnosti će se sastaviti radni paket za ovu platformu (armhf). Za sada sam prestao stvarati RPM pakete zbog problema na Fedori 30 i poteškoća s širenjem na mnoge RPM distribucije, ali kasniji paketi ipak će biti napravljeni za barem nekoliko njih. U međuvremenu možete koristiti make && make install ili checkinstall.

Hvala svima na pažnji! Nadam se da ovaj članak i ovaj projekt mogu biti korisni.

Link na repozitorij projekta

Izvor: www.habr.com

Dodajte komentar