Categorii în loc de directoare sau sistem de fișiere semantic pentru Linux

Clasificarea datelor în sine este un subiect de cercetare interesant. Îmi place să colectez informații care par necesare și am încercat întotdeauna să creez ierarhii de directoare logice pentru fișierele mele și, într-o zi, într-un vis, am văzut un program frumos și convenabil pentru atribuirea etichetelor fișierelor și am decis că nu pot trăi mai asa.

Problema sistemelor de fișiere ierarhice

Utilizatorii se confruntă adesea cu problema de a alege unde să salveze următorul fișier nou și cu problema găsirii propriilor fișiere (uneori numele fișierelor nu sunt deloc destinate să fie amintite de o persoană).

O cale de ieșire din situație poate fi sistemele de fișiere semantice, care sunt de obicei un supliment la sistemul de fișiere tradițional. Directoarele din ele sunt înlocuite cu atribute semantice, numite și etichete, categorii și metadate. Voi folosi mai des termenul „categorie”, pentru că... În contextul sistemelor de fișiere, cuvântul „etichetă” este uneori puțin ciudat, mai ales când apar „subtag-uri” și „alias-uri de etichetă”.

Atribuirea categoriilor fișierelor elimină în mare măsură problema stocării și căutării unui fișier: dacă vă amintiți (sau ghiciți) cel puțin una dintre categoriile atribuite unui fișier, atunci fișierul nu va dispărea niciodată din vedere.

Anterior, acest subiect a fost abordat de mai multe ori pe Habré (timp, два, trei, patru etc.), aici descriu soluția mea.

Calea spre Realizare

Imediat după visul menționat, am descris în caietul meu interfața de comandă care asigură munca necesară cu categorii. Apoi am decis că într-o săptămână sau două pot scrie un prototip folosind Python sau Bash și apoi va trebui să lucrez la crearea unui shell grafic în Qt sau GTK. Realitatea, ca întotdeauna, s-a dovedit a fi mult mai dură, iar dezvoltarea a fost întârziată.

Ideea inițială a fost de a crea în primul rând un program cu o interfață de linie de comandă convenabilă și concisă, care să creeze, să ștergă categorii, să atribuie categorii fișierelor și să șteargă categorii din fișiere. Am sunat la program Şoaptă.

Prima încercare de a crea Şoaptă s-a terminat în nimic, din moment ce a început să fie cheltuit mult timp la muncă și la facultate. A doua încercare a fost deja ceva: pentru teza de master, am reușit să finalizez proiectul planificat și chiar să fac un prototip al shell-ului GTK. Dar acea versiune s-a dovedit a fi atât de nesigură și incomod încât multe au trebuit regândite.

De fapt, a treia versiune am folosit-o foarte mult timp, transferând câteva mii de fișiere pe categorii. Acest lucru a fost, de asemenea, facilitat în mare măsură de finalizarea bash implementată. Dar unele probleme, cum ar fi lipsa categoriilor automate și capacitatea de a stoca fișiere cu același nume, au rămas în continuare, iar programul era deja îndoit sub propria sa complexitate. Așa am ajuns la necesitatea de a rezolva probleme complexe de dezvoltare a software-ului: să scriu cerințe detaliate, să dezvolt un sistem de testare funcțional, să studiez instrucțiunile de ambalare și multe altele. Am ajuns acum la planul meu, astfel încât această creație umilă să poată fi prezentată comunității libere. Gestionarea specifică a fișierelor, cum ar fi gestionarea prin conceptul de categorii ridică probleme și probleme neașteptate și în rezolvarea acestora Şoaptă a generat încă cinci proiecte în jurul său, dintre care unele vor fi menționate în articol. Până acum Şoaptă Nu am achiziționat un shell grafic, dar comoditatea utilizării categoriilor de fișiere din linia de comandă depășește deja pentru mine orice avantaje ale unui manager de fișiere grafic obișnuit.

Exemple de utilizare

Să începem simplu - creați o categorie:

vitis create Музыка

Să adăugăm o compoziție ca exemplu:

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

Puteți vizualiza conținutul categoriei „Muzică” utilizând subcomanda „show”:

vitis show Музыка

Îl puteți juca folosind subcomandă „deschidere”.

vitis open Музыка

Deoarece Dacă avem un singur fișier în categoria „Muzică”, atunci se va lansa doar acela. În scopul deschiderii fișierelor cu programele lor implicite, am creat un utilitar separat vts-fs-deschis (instrumente standard precum xdg-open sau mimeopen nu mi s-au potrivit din mai multe motive; dar, dacă este ceva, în setări puteți specifica un alt utilitar pentru deschiderea universală a fișierelor). Acest utilitar funcționează bine pe diferite distribuții cu medii de lucru diferite, așa că recomand să îl instalați împreună cu Vitis.

De asemenea, puteți specifica direct programul pentru deschiderea fișierelor:

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

Categorii în loc de directoare sau sistem de fișiere semantic pentru Linux

Să creăm mai multe categorii și să adăugăm fișiere folosind „assign”. Dacă fișierele sunt atribuite unor categorii care nu există încă, vi se solicită să le creați. O solicitare inutilă poate fi evitată utilizând indicatorul -yes.

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

Acum dorim să adăugăm categoria „Matematică” la fișierul „Pachetul statistic R: teoria probabilității și statistică matematică.pdf”. Știm că acest fișier este deja clasificat ca „R” și, prin urmare, putem folosi calea categoriei din sistemul Vitis:

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

Din fericire, finalizarea bash face acest lucru ușor.

Să vedem ce s-a întâmplat, folosind indicatorul --categories pentru a vedea o listă de categorii pentru fiecare fișier:

vitis show R --categories

Categorii în loc de directoare sau sistem de fișiere semantic pentru Linux

Rețineți că fișierele au fost, de asemenea, clasificate automat după format, tip (combină formatele) și extensia fișierului. Aceste categorii pot fi dezactivate dacă se dorește. Mai târziu le voi localiza cu siguranță numele.

Să adăugăm altceva la „Matematică” pentru varietate:

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

Și acum lucrurile devin interesante. În loc de categorii, puteți scrie expresii cu operațiile de unire, intersecție și scădere, adică folosiți operații pe mulțimi. De exemplu, intersecția „Math” cu „R” va avea ca rezultat un singur fișier.

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

Să scădem referințele la limba „R” din „Matematică”:

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

Putem combina fără scop muzica și limbajul R:

vitis show Музыка u: R

Indicatorul -n vă permite să „extrageți” fișierele necesare din rezultatul solicitării prin numere și/sau intervale, de exemplu, -n 3-7, sau ceva mai complicat: -n 1,5,8-10,13. Este adesea util cu subcomandă open, care vă permite să deschideți fișierele dorite dintr-o listă.

Categorii în loc de directoare sau sistem de fișiere semantic pentru Linux

În timp ce ne îndepărtăm de la utilizarea unei ierarhii convenționale de directoare, este adesea util să avem categorii imbricate. Să creăm o subcategorie „Statistici” în categoria „Matematică” și să adăugăm această categorie la fișierul corespunzător:

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

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

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

Categorii în loc de directoare sau sistem de fișiere semantic pentru Linux

Putem vedea că acest fișier are acum categoria „Math/Statistics” în loc de „Math” (sunt urmărite link-uri suplimentare).

Abordarea căii complete poate fi incomod, să creăm un alias „global”:

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

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

Categorii în loc de directoare sau sistem de fișiere semantic pentru Linux

Nu doar fișiere obișnuite

legături de internet

Pentru a unifica stocarea oricărei informații, ar fi util, cel puțin, să se clasifice link-urile către resursele de pe Internet. Și asta este posibil:

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

Un fișier va fi creat într-un loc special cu antetul paginii HTML și extensia .desktop. Acesta este formatul tradițional de scurtătură în GNU/Linux. Astfel de comenzi rapide sunt clasificate automat ca NetworkBookmarks.

Desigur, comenzile rapide sunt create pentru a fi utilizate:

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

Executarea comenzii face ca linkul nou salvat să fie deschis în browser. Comenzile rapide clasificate către sursele de Internet pot servi ca înlocuitori pentru marcajele browserului.

Fragmente de fișiere

De asemenea, este util să aveți categorii pentru bucăți individuale de fișiere. Nu este o cerere rea, nu? Dar implementarea actuală de până acum afectează doar fișierele text simplu, fișierele audio și video. Să presupunem că trebuie să marcați o anumită parte a unui concert sau un moment amuzant într-un film, apoi atunci când utilizați atribuirea puteți folosi steagurile -fragname, -start, -finish. Să salvăm screensaverul din „DuckTales”:

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

vitis open Заставки

În realitate, nu are loc tăierea fișierului; în schimb, se creează un fișier pointer către fragment, care descrie tipul fișierului, calea către fișier, începutul și sfârșitul fragmentului. Crearea și deschiderea pointerilor către fragmente este delegată utilităților pe care le-am făcut special pentru aceste scopuri - acestea sunt mediafragmenter și fragplayer. Primul creează, al doilea se deschide. În cazul înregistrărilor audio și video, fișierul media este lansat de la o anumită la o anumită poziție folosind playerul VLC, deci trebuie să fie și în sistem. La început am vrut să fac asta pe baza mplayer, dar din anumite motive a fost foarte strâmb cu poziționarea la momentul potrivit.
În exemplul nostru, este creat fișierul „Duck Tales intro.fragpointer” (este plasat într-un loc special), iar apoi este redat un fragment de la începutul fișierului (deoarece –start nu a fost specificat la creare) până la 59 al doilea marcaj, după care VLC se închide.

Un alt exemplu este atunci când am decis să catalogăm o singură performanță la un concert al unui artist celebru:

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

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

Când este deschis, fișierul va fi inclus în poziția dorită și se va închide după patru minute și jumătate.

Cum funcționează totul + caracteristici suplimentare

Stocarea categoriilor

Chiar la începutul gândirii despre organizarea unui sistem de fișiere semantice, mi-au venit în minte trei moduri: prin stocarea legăturilor simbolice, printr-o bază de date, printr-o descriere în XML. Prima metodă a câștigat, pentru că... pe de o parte, este ușor de implementat, iar pe de altă parte, utilizatorul are posibilitatea de a privi categoriile direct din sistemul de fișiere (și acest lucru este convenabil și important). La începutul utilizării Şoaptă Directorul „Vitis” și fișierul de configurare „.config/vitis/vitis.conf” sunt create în directorul principal al utilizatorului. Directoarele corespunzătoare categoriilor sunt create în ~/Vitis, iar în aceste directoare de categorii sunt create legături simbolice către fișierele originale. Aliasurile de categorii sunt, de asemenea, doar linkuri către ele. Desigur, prezența directorului „Vitis” în directorul de acasă poate să nu se potrivească unora. Putem comuta în orice altă locație:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

La un moment dat, devine clar că nu are sens să clasificați fișierele împrăștiate în locuri diferite, deoarece locația lor se poate schimba. Prin urmare, pentru început, mi-am creat un director, în care am aruncat prostește totul și i-am dat toate categoriile. Atunci am decis că ar fi frumos să oficializez acest moment la nivel de program. Așa a apărut conceptul de „spațiu de fișiere”. La începutul utilizării Şoaptă Nu ar strica să configurați imediat o astfel de locație (toate fișierele de care avem nevoie vor fi stocate acolo) și să activați salvarea automată:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Fără salvare automată, folosirea subcomandei „assign” va necesita indicatorul --save dacă doriți să salvați fișierul adăugat în spațiul de fișier.

Mai mult, puteți adăuga mai multe spații de fișiere și le puteți modifica prioritățile; acest lucru poate fi util atunci când există o mulțime de fișiere și sunt stocate pe medii diferite. Nu voi lua în considerare această posibilitate aici; detaliile pot fi găsite în ajutorul programului.

Migrarea sistemului de fișiere semantice

Oricum, directorul Vitis și spațiile de fișiere se pot muta teoretic uneori dintr-un loc în altul. Pentru ca acesta să funcționeze, am creat un utilitar separat link-editor, care poate edita în bloc link-uri, înlocuind părți ale căii cu altele:

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

În primul caz, după ce ne-am mutat de la /mnt/MyFavoriteDisk/Vitis/ în directorul principal, se editează legăturile simbolice asociate alias-urilor. În al doilea caz, după schimbarea locației spațiului de fișiere, toate linkurile din Vitis sunt schimbate în altele noi, în conformitate cu solicitarea de înlocuire a unei părți a căii lor.

Categoriile automate

Dacă executați comanda vitis service get autocategorization, puteți vedea că în mod implicit, categoriile automate sunt atribuite după format (Format și Tip) și extensia fișierului (Extensie).

Acest lucru este util atunci când, de exemplu, trebuie să găsiți ceva printre PDF-uri sau să vă uitați la ceea ce ați stocat din EPUB și FB2, puteți pur și simplu să rulați solicitarea

vitis show Format/MOBI u: Format/FB2

S-a întâmplat că instrumentele standard GNU/Linux, cum ar fi fișierul sau mimetype, nu mi se potriveau tocmai pentru că nu determină întotdeauna corect formatul; a trebuit să-mi fac propria implementare pe baza semnăturilor și extensiilor fișierelor. În general, subiectul definirii formatelor de fișiere este un subiect interesant de cercetare și merită un articol separat. Deocamdată pot spune că poate nu am oferit o adevărată recunoaștere pentru toate formatele din lume, dar în general deja funcționează bine. Adevărat, EPUB definește acum formatul ca ZIP (în general, acest lucru este justificat, dar în practică acest lucru nu ar trebui considerat un comportament normal). Pentru moment, luați în considerare această caracteristică experimentală și raportați eventualele erori. În situații ciudate, puteți utiliza întotdeauna categorii de extensii de fișiere, de exemplu, Extensie/epub.

Dacă sunt activate categoriile automate după format, sunt activate și categoriile automate care grupează unele formate după tip: „Arhive”, „Imagini”, „Video”, „Audio” și „Documente”. Se vor face și nume localizate pentru aceste subcategorii.

Ce nu se spune

Şoaptă S-a dovedit a fi un instrument cu multe fațete și este dificil să acoperiți totul deodată. Permiteți-mi să menționez pe scurt ce altceva puteți face:

  • categoriile pot fi șterse și eliminate din fișiere;
  • rezultatele interogărilor de expresie pot fi copiate în directorul specificat;
  • fișierele pot fi rulate ca programe;
  • Comanda show are multe opțiuni, de exemplu, sortarea după nume/data modificării sau acces/dimensiune/extensie, afișarea proprietăților fișierelor și căile către originale, permițând afișarea fișierelor ascunse etc.;
  • Când salvați legături către surse de Internet, puteți salva și copii locale ale paginilor HTML.

Detaliile complete pot fi găsite în ajutorul utilizatorului.

Perspective

Scepticii spun adesea că „nimeni nu va stabili singur aceste etichete”. Folosind propriul meu exemplu, pot demonstra contrariul: am clasificat deja peste șase mii de fișiere, am creat peste o mie de categorii și aliasuri și a meritat. Când o echipă vitis open План deschideți lista de sarcini sau când cu o singură comandă vitis open LaTeX Când deschideți cartea lui Stolyarov despre sistemul de layout LaTeX, este deja dificil din punct de vedere moral să utilizați sistemul de fișiere „în mod veche”.

Pe această bază, apar o serie de idei. De exemplu, puteți face un radio automat care pornește muzica tematică în funcție de vremea curentă, de sărbătoare, de ziua săptămânii, de ora din zi sau de an. Și mai aproape de subiect este un music player care știe despre categorii și poate reda muzică prin expresie cu operațiuni pe categorii ca pe seturi. Este util să faci un demon care să monitorizeze directorul „Descărcări” și să se ofere să clasifice fișiere noi. Și, desigur, ar trebui să facem un manager de fișiere semantic grafic normal. Cândva am creat chiar și un serviciu web pentru întreprindere pentru utilizarea colectivă a fișierelor, dar nu a fost o prioritate și a devenit irelevant, deși a atins un nivel ridicat de performanță. (Datorită schimbărilor majore în Şoaptă, nu mai este utilizabil.)

iată un mic demo

Categorii în loc de directoare sau sistem de fișiere semantic pentru Linux

Concluzie

vitis nu este prima încercare de a schimba radical stilul de lucru cu datele, dar am considerat important să-mi implementez ideile și să fac implementarea disponibilă public sub licența GNU GPL. Pentru comoditate, a fost creat un pachet deb pentru x86-64; ar trebui să funcționeze pe toate distribuțiile Debian moderne. Au existat dificultăți minore la ARM (în timp ce toate celelalte programe au fost legate de Şoaptă, funcționează bine), dar în viitor va fi compilat un pachet de lucru pentru această platformă (armhf). Am încetat să mai creez pachete RPM deocamdată din cauza problemelor de pe Fedora 30 și a dificultății de a se răspândi în multe distribuții RPM, dar pachetele ulterioare vor fi încă făcute pentru cel puțin câteva dintre ele. Între timp poți folosi make && make install sau checkinstall.

Vă mulțumim tuturor pentru atenție! Sper că acest articol și acest proiect vă pot fi de folos.

Link către depozitul de proiect

Sursa: www.habr.com

Adauga un comentariu