Kategorie místo adresářů nebo sémantický souborový systém pro Linux

Samotná klasifikace dat je zajímavým výzkumným tématem. Miluji shromažďování informací, které se zdají nezbytné, a vždy jsem se snažil vytvořit logické hierarchie adresářů pro své soubory a jednoho dne jsem ve snu viděl krásný a pohodlný program pro přidělování značek souborům a rozhodl jsem se, že nemohu žít takhle už dál.

Problém hierarchických souborových systémů

Uživatelé se často potýkají s problémem výběru, kam uložit další nový soubor, as problémem hledání vlastních souborů (někdy nejsou názvy souborů vůbec určeny k tomu, aby si je člověk zapamatoval).

Východiskem ze situace mohou být sémantické souborové systémy, které jsou obvykle doplňkem tradičního souborového systému. Adresáře v nich jsou nahrazeny sémantickými atributy, nazývanými také značky, kategorie a metadata. Termín „kategorie“ budu používat častěji, protože... V kontextu souborových systémů je slovo "tag" někdy trochu zvláštní, zvláště když se objeví "subtags" a "tag aliasy".

Přiřazování kategorií souborům do značné míry eliminuje problémy s ukládáním a vyhledáváním souboru: pokud si pamatujete (nebo uhodnete) alespoň jednu z kategorií přiřazených k souboru, soubor nikdy nezmizí z dohledu.

Dříve bylo toto téma na Habré nastoleno více než jednou (čas, два, tři, čtyři atd.), zde popisuji své řešení.

Cesta k realizaci

Bezprostředně po zmíněném snu jsem popsal ve svém notebooku příkazové rozhraní, které zajišťuje potřebnou práci s kategoriemi. Pak jsem se rozhodl, že za týden nebo dva mohu napsat prototyp pomocí Pythonu nebo Bashe a pak budu muset pracovat na vytvoření grafického shellu v Qt nebo GTK. Realita se jako vždy ukázala mnohem tvrdší a vývoj se opozdil.

Původní myšlenkou bylo nejprve vytvořit program s pohodlným a stručným rozhraním příkazové řádky, který by vytvářel, odstraňoval kategorie, přiřazoval kategorie souborům a odstraňoval kategorie ze souborů. Volal jsem do programu vitis.

První pokus o vytvoření vitis skončilo v ničem, protože spoustu času začalo trávit prací a vysokou školou. Druhý pokus už byl něco: pro diplomovou práci se mi podařilo dokončit plánovaný projekt a dokonce vyrobit prototyp pláště GTK. Ale tato verze se ukázala být tak nespolehlivá a nepohodlná, že bylo třeba mnohé přehodnotit.

Třetí verzi jsem vlastně sám používal velmi dlouho, když jsem převedl několik tisíc svých souborů do kategorií. Tomu také značně napomohla implementovaná dostavba bash. Některé problémy, jako je nedostatek automatických kategorií a možnost ukládat soubory se stejným názvem, však stále přetrvávaly a program byl již ohnut pod svou vlastní složitostí. Tak jsem se dostal k potřebě řešit složité problémy s vývojem softwaru: napsat podrobné požadavky, vyvinout funkční testovací systém, prostudovat návody na balení a mnoho dalšího. Nyní jsem dospěl ke svému plánu, takže toto skromné ​​stvoření může být představeno svobodné komunitě. Specifická správa souborů, jako je správa prostřednictvím konceptu kategorií, vyvolává neočekávané problémy a problémy a při jejich řešení vitis kolem sebe zplodil dalších pět projektů, z nichž některé budou zmíněny v článku. Do teď vitis Nemám zakoupený grafický shell, ale pohodlí používání kategorií souborů z příkazové řádky už pro mě převažuje nad výhodami běžného grafického správce souborů.

Příklady použití

Začněme jednoduše – vytvořte kategorii:

vitis create Музыка

Přidejme k tomu nějaké složení jako příklad:

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

Obsah kategorie „Music“ můžete zobrazit pomocí dílčího příkazu „show“:

vitis show Музыка

Můžete jej přehrát pomocí dílčího příkazu „open“.

vitis open Музыка

Protože Pokud máme v kategorii „Hudba“ pouze jeden soubor, spustí se pouze tento. Pro účely otevírání souborů pomocí jejich výchozích programů jsem vytvořil samostatný nástroj vts-fs-open (standardní nástroje jako xdg-open nebo mimeopen mi z řady důvodů nevyhovovaly, ale pokud něco, v nastavení lze určit jinou utilitu pro univerzální otevírání souborů). Tato utilita funguje dobře na různých distribucích s různými pracovními prostředími, takže ji doporučuji nainstalovat spolu s vitisem.

Můžete také přímo zadat program pro otevírání souborů:

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

Kategorie místo adresářů nebo sémantický souborový systém pro Linux

Pojďme vytvořit další kategorie a přidat soubory pomocí „přiřadit“. Pokud jsou soubory přiřazeny do kategorií, které ještě neexistují, budete vyzváni k jejich vytvoření. Zbytečnému požadavku lze předejít použitím parametru -yes.

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

Nyní chceme přidat kategorii „Matematika“ do souboru „Statistický balíček R: teorie pravděpodobnosti a matematická statistika.pdf“. Víme, že tento soubor je již kategorizován jako „R“, a proto můžeme použít cestu kategorie ze systému Vitis:

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

Dokončení bash to naštěstí usnadňuje.

Podívejme se, co se stalo, pomocí příznaku --categories zobrazíme seznam kategorií pro každý soubor:

vitis show R --categories

Kategorie místo adresářů nebo sémantický souborový systém pro Linux

Všimněte si, že soubory byly také automaticky kategorizovány podle formátu, typu (kombinace formátů) a přípony souboru. Tyto kategorie lze v případě potřeby deaktivovat. Později jejich jména určitě lokalizuji.

Přidejme k „matematice“ ještě něco pro zpestření:

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

A teď jsou věci zajímavé. Místo kategorií můžete psát výrazy s operacemi sjednocení, průniku a odčítání, tedy používat operace na množinách. Například průsečík "Math" s "R" bude mít za následek jeden soubor.

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

Odečteme odkazy na jazyk „R“ od „Matematiky“:

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

Můžeme bezcílně kombinovat hudbu a jazyk R:

vitis show Музыка u: R

Parametr -n vám umožňuje „vytáhnout“ požadované soubory z výsledku požadavku podle čísel a/nebo rozsahů, např. -n 3-7nebo něco složitějšího: -n 1,5,8-10,13. Často je užitečný s dílčím příkazem open, který umožňuje otevřít požadované soubory ze seznamu.

Kategorie místo adresářů nebo sémantický souborový systém pro Linux

Zatímco se vzdalujeme používání konvenční hierarchie adresářů, často je užitečné mít vnořené kategorie. Vytvoříme podkategorii „Statistika“ v kategorii „Matematika“ a přidáme tuto kategorii do příslušného souboru:

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

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

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

Kategorie místo adresářů nebo sémantický souborový systém pro Linux

Vidíme, že tento soubor má nyní kategorii „Math/Statistics“ namísto „Math“ (jsou sledovány další odkazy).

Adresování celé cesty může být nepohodlné, pojďme vytvořit „globální“ alias:

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

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

Kategorie místo adresářů nebo sémantický souborový systém pro Linux

Nejen běžné soubory

Internetové odkazy

Pro sjednocení ukládání jakýchkoli informací by bylo užitečné minimálně kategorizovat odkazy na internetové zdroje. A toto je možné:

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

Na speciálním místě se vytvoří soubor s hlavičkou HTML stránky a příponou .desktop. Toto je tradiční formát zkratek v GNU/Linuxu. Takové zkratky jsou automaticky kategorizovány jako NetworkBookmarks.

Přirozeně jsou vytvořeny zkratky pro použití:

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

Provedení příkazu způsobí otevření nově uloženého odkazu v prohlížeči. Kategorizované zkratky k internetovým zdrojům mohou sloužit jako náhrada za záložky prohlížeče.

Fragmenty souborů

Je také užitečné mít kategorie pro jednotlivé kusy souborů. Není to špatný požadavek, co? Ale současná implementace zatím ovlivňuje pouze prosté textové soubory, audio a video soubory. Řekněme, že potřebujete označit určitou část koncertu nebo vtipný moment ve filmu, pak při použití přiřadit můžete použít příznaky -fragname, -start, -finish. Uložme spořič obrazovky z "DuckTales":

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

vitis open Заставки

Ve skutečnosti k žádnému řezání souboru nedochází, místo toho se vytvoří soubor ukazatele na fragment, který popisuje typ souboru, cestu k souboru, začátek a konec fragmentu. Vytváření a otevírání ukazatelů na fragmenty je delegováno na utility, které jsem pro tyto účely speciálně vyrobil – jedná se o mediafragmenter a fragplayer. První vytváří, druhý otevírá. V případě audio a video nahrávek se mediální soubor spouští z určité do určité pozice pomocí VLC přehrávače, takže musí být také v systému. Nejprve jsem to chtěl udělat na základě mplayeru, ale z nějakého důvodu to bylo velmi pokřivené umístěním ve správný okamžik.
V našem příkladu se vytvoří soubor „Duck Tales intro.fragpointer“ (umístí se na speciální místo) a poté se přehraje fragment od začátku souboru (protože při vytváření nebylo zadáno –start) až do 59 druhá značka, po které se VLC zavře .

Dalším příkladem je situace, kdy jsme se rozhodli kategorizovat jedno vystoupení na koncertu slavného umělce:

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

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

Po otevření bude soubor zařazen na požadovanou pozici a po čtyřech a půl minutách se zavře.

Jak to celé funguje + další funkce

Ukládání kategorií

Na úplném začátku úvah o organizaci sémantického souborového systému přišly na mysl tři způsoby: přes uložení symbolických odkazů, přes databázi, přes popis v XML. Vyhrála první metoda, protože... jednak se snadno implementuje a jednak má uživatel možnost nahlížet do kategorií přímo ze souborového systému (a to je pohodlné a důležité). Na začátku používání vitis Adresář „Vitis“ a konfigurační soubor „.config/vitis/vitis.conf“ jsou vytvořeny v domovském adresáři uživatele. Adresáře odpovídající kategoriím se vytvářejí v ~/Vitis a v těchto adresářích kategorií se vytvářejí symbolické odkazy na původní soubory. Aliasy kategorií jsou také jen odkazy na ně. Přítomnost adresáře „Vitis“ v domovském adresáři samozřejmě nemusí některým lidem vyhovovat. Můžeme se přepnout na jakékoli jiné místo:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

V určitém okamžiku se ukáže, že nemá smysl kategorizovat soubory roztroušené na různých místech, protože jejich umístění se může změnit. Proto jsem si pro začátek vytvořil pro sebe adresář, kam jsem hloupě všechno vysypal a dal tomu všechny kategorie. Pak jsem se rozhodl, že by bylo hezké tento okamžik formalizovat na programové úrovni. Tak se objevil koncept „souborového prostoru“. Na začátku používání vitis Nebylo by na škodu takové umístění okamžitě nastavit (budou tam uloženy všechny soubory, které potřebujeme) a povolit automatické ukládání:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Bez automatického ukládání bude při použití dílčího příkazu "assign" vyžadován příznak --save, pokud chcete uložit přidaný soubor do souborového prostoru.

Navíc můžete přidat několik souborových prostorů a změnit jejich priority, což může být užitečné, když je souborů hodně a jsou uloženy na různých médiích. Tuto možnost zde nebudu uvažovat, podrobnosti naleznete v nápovědě programu.

Migrace sémantického souborového systému

Každopádně adresář a souborové prostory Vitis se teoreticky někdy mohou přesouvat z místa na místo. Aby to fungovalo, vytvořil jsem samostatnou utilitu editor odkazů, která může hromadně upravovat odkazy a nahrazovat části cesty jinými:

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 prvním případě, poté, co jsme se přesunuli z /mnt/MyFavoriteDisk/Vitis/ do domovského adresáře, se upraví symbolické odkazy spojené s aliasy. Ve druhém případě se po změně umístění souborového prostoru všechny odkazy ve Vitisu změní na nové v souladu s požadavkem na nahrazení části jejich cesty.

Automatické kategorie

Pokud spustíte příkaz vitis service get autocategorization, můžete vidět, že ve výchozím nastavení jsou automatické kategorie přiřazeny podle formátu (Formát a Typ) a přípony souboru (Přípona).

To se hodí, když například potřebujete najít něco mezi PDF nebo se podívat, co máte uložené z EPUB a FB2, jednoduše spustíte požadavek

vitis show Format/MOBI u: Format/FB2

Stalo se, že standardní nástroje GNU/Linuxu jako file nebo mimetype mi nevyhovovaly právě proto, že ne vždy správně určují formát, musel jsem si udělat vlastní implementaci na základě podpisů souborů a přípon. Obecně je téma definování formátů souborů zajímavé téma pro výzkum a zaslouží si samostatný článek. Zatím mohu říci, že jsem možná neposkytl skutečné uznání pro všechny formáty na světě, ale obecně to již funguje dobře. Pravda, EPUB nyní definuje formát jako ZIP (obecně je to opodstatněné, ale v praxi by to nemělo být považováno za normální chování). Prozatím považujte tuto funkci za experimentální a nahlaste případné chyby. V podivných situacích můžete vždy použít kategorie přípon souborů, například Extension/epub.

Pokud jsou povoleny automatické kategorie podle formátu, jsou také povoleny automatické kategorie, které seskupují některé formáty podle typu: „Archiv“, „Obrázky“, „Video“, „Audio“ a „Dokumenty“. Pro tyto podkategorie budou také vytvořeny lokalizované názvy.

Co není řečeno

vitis Ukázalo se, že je to velmi mnohostranný nástroj a je obtížné pokrýt vše najednou. Dovolte mi krátce zmínit, co dalšího můžete udělat:

  • kategorie lze odstranit a odstranit ze souborů;
  • výsledky výrazových dotazů lze zkopírovat do zadaného adresáře;
  • soubory lze spouštět jako programy;
  • Příkaz show má mnoho možností, například řazení podle názvu/datu úpravy nebo přístupu/velikost/přípona, zobrazení vlastností souboru a cesty k originálu, povolení zobrazení skrytých souborů atd.;
  • Když uložíte odkazy na internetové zdroje, můžete také uložit místní kopie stránek HTML.

Úplné podrobnosti naleznete v uživatelské nápovědě.

Vyhlídky

Skeptici často říkají, že „nikdo tyto značky nenastaví sám“. Na vlastním příkladu mohu dokázat opak: kategorizoval jsem již více než šest tisíc souborů, vytvořil více než tisíc kategorií a aliasů a stálo to za to. Když jeden tým vitis open План otevřete seznam úkolů nebo pomocí jednoho příkazu vitis open LaTeX Když otevřete Stolyarovovu knihu o systému rozložení LaTeX, je již morálně obtížné používat souborový systém „starým způsobem“.

Na tomto základě vzniká řada nápadů. Můžete si například vyrobit automatické rádio, které zapne tematickou hudbu podle aktuálního počasí, svátku, dne v týdnu, denní doby nebo roku. Ještě blíže k tématu je hudební přehrávač, který ví o kategoriích a umí přehrávat hudbu výrazem s operacemi nad kategoriemi jako s množinami. Je užitečné vytvořit démona, který bude sledovat adresář "Downloads" a nabízet kategorizaci nových souborů. A samozřejmě bychom měli udělat normálního grafického sémantického správce souborů. Kdysi jsem dokonce vytvořil webovou službu pro podnik pro hromadné použití souborů, ale nebylo to prioritou a stalo se irelevantní, ačkoli dosahovalo vysoké úrovně výkonu. (Vzhledem k velkým změnám v vitis, již není použitelný.)

tady je malá ukázka

Kategorie místo adresářů nebo sémantický souborový systém pro Linux

Závěr

Vitise není prvním pokusem o radikální změnu stylu práce s daty, ale považoval jsem za důležité realizovat své nápady a zpřístupnit implementaci veřejně pod licencí GNU GPL. Pro usnadnění byl vytvořen balíček deb pro x86-64, který by měl fungovat na všech moderních distribucích Debianu. Na ARM došlo k menším potížím (zatímco všechny ostatní programy se týkaly vitis, funguje dobře), ale v budoucnu bude pro tuto platformu zkompilován pracovní balíček (armhf). Prozatím jsem přestal vytvářet balíčky RPM kvůli problémům na Fedoře 30 a obtížnosti šíření v mnoha distribucích RPM, ale pozdější balíčky budou stále vytvořeny alespoň pro několik z nich. Mezitím můžete používat make && make install nebo checkinstall.

Děkuji všem za pozornost! Doufám, že tento článek a tento projekt mohou být užitečné.

Odkaz na úložiště projektu

Zdroj: www.habr.com

Přidat komentář