Kategorije umjesto direktorija ili semantički sistem datoteka za Linux

Sama klasifikacija podataka je zanimljiva tema istraživanja. Volim da prikupljam informacije koje se čine neophodnim, i uvek sam pokušavao da napravim logičke hijerarhije direktorijuma za svoje fajlove, i jednog dana u snu sam video prelep i zgodan program za dodeljivanje oznaka fajlovima i odlučio sam da ne mogu da živim ovako više.

Problem hijerarhijskih sistema datoteka

Korisnici se često susreću s problemom odabira gdje će spremiti sljedeću novu datoteku i problemom pronalaženja vlastitih datoteka (ponekad nazivi datoteka uopće nisu namijenjeni da ih osoba zapamti).

Izlaz iz situacije može biti semantički sistem datoteka, koji je obično dodatak tradicionalnom sistemu datoteka. Direktoriji u njima su zamijenjeni semantičkim atributima, koji se nazivaju i oznake, kategorije i metapodaci. Češće ću koristiti termin "kategorija", jer... U kontekstu sistema datoteka, riječ "tag" je ponekad pomalo čudna, posebno kada se pojavljuju "podoznake" i "pseudonimi oznaka".

Dodjeljivanje kategorija datotekama u velikoj mjeri eliminira problem pohranjivanja i traženja datoteke: ako se sjećate (ili pogodite) barem jedne od kategorija dodijeljenih datoteci, tada datoteka nikada neće nestati iz prikaza.

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

Put do realizacije

Odmah nakon pomenutog sna opisao sam u svojoj bilježnici komandni interfejs koji omogućava neophodan rad sa kategorijama. Onda sam odlučio da za nedelju ili dve mogu da napišem prototip koristeći Python ili Bash, a onda ću morati da radim na kreiranju grafičke ljuske u Qt ili GTK. Realnost se, kao i uvijek, pokazala mnogo oštrijom, a razvoj je kasnio.

Prvobitna ideja je bila da se pre svega napravi program sa zgodnim i konciznim interfejsom komandne linije koji bi kreirao, brisao kategorije, dodeljivao kategorije fajlovima i brisao kategorije iz fajlova. Pozvao sam program Šapni.

Prvi pokušaj stvaranja Šapni završilo ničim, pošto se mnogo vremena počelo trošiti na posao i fakultet. Drugi pokušaj je već bio nešto: za magistarski rad uspio sam završiti planirani projekat, pa čak i napraviti prototip GTK ljuske. Ali ta verzija se pokazala toliko nepouzdanom i nezgodnom da se mnogo toga moralo preispitati.

Ja sam zapravo treću verziju i sam koristio jako dugo, prenijevši nekoliko hiljada mojih fajlova u kategorije. To je također uvelike olakšano implementiranim bash dovršenjem. Ali neki problemi, poput nedostatka automatskih kategorija i mogućnosti pohranjivanja datoteka istog imena, i dalje su ostali, a program je već bio savijen pod vlastitom složenošću. Tako sam došao do potrebe da riješim složene probleme razvoja softvera: napišem detaljne zahtjeve, razvijem funkcionalni sistem testiranja, proučim uputstva za pakovanje 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 fajlovima kao što je upravljanje kroz koncept kategorija otvara neočekivana pitanja i probleme, a u njihovom rješavanju Šapni pokrenuo je oko sebe još pet projekata, od kojih će neki biti spomenuti u članku. Do sada Šapni Nisam kupio grafičku ljusku, ali pogodnost korištenja kategorija datoteka iz komandne linije za mene već nadmašuje sve prednosti običnog grafičkog upravitelja datoteka.

Primjeri upotrebe

Počnimo jednostavno - kreirajte kategoriju:

vitis create Музыка

Dodajmo mu neku kompoziciju kao primjer:

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

Možete pogledati sadržaj kategorije “Muzika” koristeći podnaredbu “show”:

vitis show Музыка

Možete je igrati koristeći podnaredbu “otvori”.

vitis open Музыка

Jer Ako imamo samo jednu datoteku u kategoriji „Muzika“, onda će se samo ona pokrenuti. U svrhu otvaranja fajlova sa njihovim podrazumevanim programima, napravio sam poseban uslužni program vts-fs-open (standardni alati kao što su xdg-open ili mimeopen nisu mi odgovarali iz više razloga; ali, ako ništa drugo, u postavkama možete odrediti drugi uslužni program za univerzalno otvaranje datoteka). Ovaj uslužni program dobro radi na različitim distribucijama sa različitim radnim okruženjima, pa preporučujem da ga instalirate zajedno sa vitisom.

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

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

Kategorije umjesto direktorija ili semantički sistem datoteka za Linux

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

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

Sada želimo da dodamo kategoriju “Matematika” u fajl “Statistički paket R: teorija vjerovatnoće i matematička statistika.pdf”. Znamo da je ova datoteka već kategorizirana kao "R" i stoga možemo koristiti putanju kategorije iz Vitis sistema:

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

Srećom, bash završetak ovo čini lakim.

Hajde da vidimo šta se dogodilo, koristeći --categories zastavicu da vidimo listu kategorija za svaki fajl:

vitis show R --categories

Kategorije umjesto direktorija ili semantički sistem datoteka za Linux

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

Dodajmo još nešto u "Matematiku" za raznolikost:

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

A sada stvari postaju zanimljive. Umjesto kategorija, možete pisati izraze sa operacijama ujedinjenja, presjeka i oduzimanja, odnosno koristiti operacije nad skupovima. Na primjer, presjek "Matematike" sa "R" će rezultirati jednim fajlom.

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

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

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

Možemo besciljno kombinovati muziku i R jezik:

vitis show Музыка u: R

Oznaka -n vam omogućava da "izvučete" tražene datoteke iz rezultata zahtjeva brojevima i/ili rasponima, na primjer, -n 3-7ili nešto komplikovanije: -n 1,5,8-10,13. Često je korisno sa podnaredbom open, koja vam omogućava da otvorite željene datoteke sa liste.

Kategorije umjesto direktorija ili semantički sistem datoteka za Linux

Iako se udaljavamo od korištenja konvencionalne hijerarhije direktorija, često je korisno imati ugniježđene kategorije. Kreirajmo podkategoriju “Statistika” u kategoriji “Matematika” i dodajmo ovu kategoriju odgovarajućoj datoteci:

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

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

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

Kategorije umjesto direktorija ili semantički sistem datoteka za Linux

Vidimo da ovaj fajl sada ima kategoriju “Matematika/Statistika” umjesto “Matematika” (praće se dodatni linkovi).

Adresiranje punog puta može biti nezgodno, napravimo “globalni” alias:

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

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

Kategorije umjesto direktorija ili semantički sistem datoteka za Linux

Ne samo obične datoteke

Internet veze

Kako bi se objedinilo pohranjivanje bilo koje informacije, bilo bi korisno, u najmanju ruku, kategorizirati veze ka Internet resursima. A ovo je moguće:

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

Fajl sa HTML zaglavljem stranice i ekstenzijom .desktop biće kreiran na posebnom mestu. Ovo je tradicionalni format prečice u GNU/Linuxu. Takve prečice se automatski kategorišu kao mrežne oznake.

Naravno, prečice su kreirane da se koriste:

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

Izvršavanje naredbe uzrokuje otvaranje novospremljene veze u pretraživaču. Kategorizirane prečice do Internet izvora mogu poslužiti kao zamjena za markere u pretraživaču.

Fragmenti fajla

Također je korisno imati kategorije za pojedinačne dijelove datoteka. Nije loš zahtjev, a? Ali 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 onda kada koristite assign možete koristiti zastavice -fragname, -start, -finish. Sačuvajmo 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, kreira se datoteka pokazivača na fragment, koji opisuje tip datoteke, putanju do datoteke, početak i kraj fragmenta. Kreiranje i otvaranje pokazivača na fragmente delegirano je uslužnim programima koje sam posebno napravio za ove svrhe - to su mediafragmenter i fragplayer. Prvi stvara, drugi otvara. U slučaju audio i video snimaka, medijski fajl se pokreće sa određene na određenu poziciju pomoću VLC plejera, tako da mora biti i u sistemu. U početku sam želio ovo da uradim na osnovu mplayer-a, ali je iz nekog razloga bilo jako krivo sa pozicioniranjem u pravom trenutku.
U našem primjeru kreira se datoteka “Duck Tales intro.fragpointer” (stavlja se na posebno mjesto), a zatim se fragment reprodukuje od početka fajla (pošto –start nije naveden prilikom kreiranja) do 59. druga oznaka, nakon čega se VLC zatvara .

Drugi primjer je kada smo odlučili da kategoriziramo 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, fajl će biti uključen u željenu poziciju i zatvoriće se nakon četiri i po minuta.

Kako sve funkcionira + dodatne funkcije

Pohranjivanje kategorija

Na samom početku razmišljanja o organizovanju semantičkog sistema datoteka pala su mi na pamet tri načina: kroz skladištenje simboličkih veza, preko baze podataka, kroz opis u XML-u. Prvi metod je pobedio, jer... s jedne strane, jednostavan je za implementaciju, a s druge strane korisnik ima priliku da gleda kategorije direktno iz sistema datoteka (a to je zgodno i važno). Na početku upotrebe Šapni Direktorij “Vitis” i konfiguracijska datoteka “.config/vitis/vitis.conf” kreiraju se u početnom direktoriju korisnika. Direktoriji koji odgovaraju kategorijama kreiraju se u ~/Vitis, a simboličke veze do originalnih datoteka se kreiraju u tim direktorijima kategorija. Alijasi kategorija su također samo veze do njih. Naravno, prisustvo direktorija “Vitis” u matičnom imeniku nekima možda neće odgovarati. 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 raštrkane na različitim mjestima, jer se njihova lokacija može promijeniti. Stoga sam, za početak, napravio direktorij za sebe, gdje sam sve glupo izbacio i dao sve kategorije. Tada sam odlučio da bi bilo lijepo formalizirati ovaj trenutak na programskom nivou. Tako se pojavio koncept „prostora datoteka“. Na početku upotrebe Šapni Ne bi škodilo da odmah postavite takvu lokaciju (tu će biti pohranjeni svi fajlovi koji su nam potrebni) i omogućite automatsko spremanje:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Bez automatskog spremanja, korištenje podnaredbe "assign" će zahtijevati oznaku --save ako želite spremiti dodanu datoteku u prostor datoteke.

Osim toga, možete dodati nekoliko prostora datoteka i promijeniti njihove prioritete; ovo može biti korisno kada postoji mnogo datoteka i oni su pohranjeni na različitim medijima. Ovdje neću razmatrati ovu mogućnost; detalje možete pronaći u pomoći programa.

Semantička migracija sistema datoteka

U svakom slučaju, Vitis direktorij i prostori datoteka teoretski se ponekad mogu pomicati s mjesta na mjesto. Da bi to funkcioniralo, napravio sam poseban uslužni program link-editor, koji može grupno uređivati ​​veze, zamjenjujući dijelove puta 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 prešli sa /mnt/MyFavoriteDisk/Vitis/ u početni direktorij, uređuju se simboličke veze povezane sa aliasima. U drugom slučaju, nakon promene lokacije fajl prostora, svi linkovi u Vitis-u se menjaju u nove u skladu sa zahtevom za zamenu dela njihove putanje.

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 (Extension).

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, možete jednostavno pokrenuti zahtjev

vitis show Format/MOBI u: Format/FB2

Desilo se da mi standardni GNU/Linux alati kao što su fajl ili mimetype nisu odgovarali baš zato što ne određuju uvek ispravno format; morao sam da napravim sopstvenu implementaciju na osnovu 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 pružio pravu prepoznatljivost za sve formate u svijetu, ali generalno već dobro funkcionira. Istina, EPUB sada definiše format kao ZIP (u principu, to je opravdano, ali u praksi to ne bi trebalo smatrati normalnim ponašanjem). Za sada, ovu funkciju smatrajte eksperimentalnom i prijavite sve greške. U čudnim situacijama, uvijek možete koristiti kategorije ekstenzija datoteka, na primjer, Extension/epub.

Ako su omogućene autokategorije po formatu, omogućene su i autokategorije koje grupišu neke formate po tipu: “Arhive”, “Slike”, “Video”, “Audio” i “Dokumenti”. Lokalizirani nazivi će također biti napravljeni za ove potkategorije.

Šta nije rečeno

Šapni Pokazalo se da je to vrlo višestruko sredstvo i teško je pokriti sve odjednom. Dozvolite mi da ukratko pomenem šta još možete učiniti:

  • kategorije se mogu brisati i uklanjati iz datoteka;
  • rezultati upita izraza mogu se kopirati u navedeni direktorij;
  • datoteke se mogu pokrenuti kao programi;
  • Naredba show ima mnogo opcija, na primjer, sortiranje po imenu/datumu modifikacije ili pristupu/veličini/proširenju, prikaz svojstava datoteke i putanja do originala, omogućavanje prikaza skrivenih datoteka, itd.;
  • Kada spremate veze ka Internet izvorima, možete sačuvati i lokalne kopije HTML stranica.

Sve detalje možete pronaći u korisničkoj pomoći.

Perspektive

Skeptici često kažu da “niko neće sam postaviti ove oznake”. Na vlastitom primjeru mogu dokazati suprotno: već sam kategorizirao više od šest hiljada fajlova, kreirao više od hiljadu kategorija i aliasa, i vrijedilo je. Kada jedna ekipa vitis open План otvorite svoju listu obaveza ili jednom komandom vitis open LaTeX Kada otvorite Stoljarovovu knjigu o LaTeX sistemu rasporeda, već je moralno teško koristiti sistem datoteka „na starinski način“.

Na osnovu toga se javljaju brojne ideje. Na primjer, možete napraviti automatski radio koji uključuje tematsku muziku prema trenutnom vremenu, prazniku, danu u sedmici, dobu dana ili godine. Još bliži temi je muzički plejer koji zna o kategorijama i može da pušta muziku po izrazu sa operacijama na kategorijama kao na setovima. Korisno je napraviti demon koji će nadgledati direktorij "Preuzimanja" 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 preduzeće za kolektivnu upotrebu fajlova, ali to nije bio prioritet i postao je irelevantan, iako je postigao visok nivo performansi. (Zbog velikih promjena u Šapni, više se ne može koristiti.)

evo malo demo

Kategorije umjesto direktorija ili semantički sistem datoteka za Linux

zaključak

vitis nije prvi pokušaj da se radikalno promijeni stil rada sa podacima, ali smatrao sam važnim implementirati svoje ideje i učiniti implementaciju javno dostupnom pod GNU GPL licencom. Radi praktičnosti, napravljen je deb paket za x86-64; trebao bi raditi na svim modernim Debian distribucijama. Bilo je manjih poteškoća na ARM-u (dok su se svi ostali programi odnosili na Šapni, radi dobro), ali će u budućnosti biti sastavljen radni paket za ovu platformu (armhf). Za sada sam prestao da kreiram RPM pakete zbog problema na Fedori 30 i poteškoća sa širenjem na mnoge RPM distribucije, ali kasniji paketi će i dalje 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 projekat mogu biti korisni.

Link do repozitorija projekta

izvor: www.habr.com

Dodajte komentar