Каталогтардың орнына санаттар немесе Linux үшін семантикалық файлдық жүйе

Деректер классификациясының өзі қызықты зерттеу тақырыбы болып табылады. Мен қажет болып көрінетін ақпаратты жинауды жақсы көремін, мен әрқашан файлдарым үшін логикалық каталог иерархияларын жасауға тырыстым және бір күні түсімде файлдарға тегтерді тағайындауға арналған әдемі және ыңғайлы бағдарламаны көрдім және мен өмір сүре алмаймын деп шештім. енді осылай.

Иерархиялық файлдық жүйелер мәселесі

Пайдаланушылар жиі келесі жаңа файлды қайда сақтау керектігін таңдау мәселесімен және өз файлдарын табу мәселесімен кездеседі (кейде файл атаулары адамның есте сақтауына мүлдем арналмаған).

Жағдайдан шығу жолы әдетте дәстүрлі файлдық жүйеге қосымша болып табылатын семантикалық файлдық жүйелер болуы мүмкін. Олардағы каталогтар тегтер, санаттар және метадеректер деп те аталатын семантикалық атрибуттармен ауыстырылады. Мен «категория» терминін жиі қолданатын боламын, өйткені... Файлдық жүйелер контекстінде «тег» сөзі кейде біршама оғаш болады, әсіресе «қосалқы тегтер» және «тег бүркеншік аттары» пайда болған кезде.

Файлдарға санаттарды тағайындау файлды сақтау және іздеу мәселесін айтарлықтай жояды: егер сіз файлға тағайындалған санаттардың кем дегенде біреуін есте сақтасаңыз (немесе болжасаңыз), файл ешқашан көріністен жоғалмайды.

Бұрын бұл тақырып Хабреде бірнеше рет көтерілген болатын (рет, два, үш, төртеуі т.б.), мұнда мен өз шешімімді сипаттаймын.

Іске асыру жолы

Аталмыш арманнан кейін мен өзімнің жазу кітапшамда санаттармен қажетті жұмысты қамтамасыз ететін командалық интерфейсті сипаттадым. Содан кейін мен бір-екі аптадан кейін Python немесе Bash көмегімен прототип жаза аламын, содан кейін Qt немесе GTK графикалық қабықшасын жасаумен жұмыс істеуім керек деп шештім. Шындық, әдеттегідей, әлдеқайда қатал болып шықты және даму кешіктірілді.

Бастапқы идея бірінші кезекте санаттарды жасайтын, жоятын, файлдарға санаттарды тағайындайтын және файлдардан санаттарды жоя алатын ыңғайлы және қысқа пәрмен жолы интерфейсі бар бағдарлама жасау болды. Мен бағдарламаға қоңырау шалдым vitis.

Алғашқы құру әрекеті vitis ештеңемен аяқталды, өйткені көп уақыт жұмысқа және колледжге жұмсала бастады. Екінші әрекет әлдеқашан болды: магистрлік диссертация үшін мен жоспарланған жобаны аяқтадым, тіпті GTK қабығының прототипін жасай алдым. Бірақ бұл нұсқа соншалықты сенімсіз және ыңғайсыз болып шықты, сондықтан көп нәрсені қайта қарауға тура келді.

Мен бірнеше мың файлдарымды санаттарға ауыстырып, үшінші нұсқаны өзім ұзақ уақыт пайдаландым. Бұл іске асырылған bash аяқтауымен де айтарлықтай жеңілдетілді. Бірақ кейбір мәселелер, мысалы, автоматты санаттардың болмауы және аттас файлдарды сақтау мүмкіндігі әлі де сақталды және бағдарлама өзінің күрделілігімен иілген. Осылайша мен бағдарламалық қамтамасыз етуді әзірлеудің күрделі мәселелерін шешу қажеттілігіне келдім: егжей-тегжейлі талаптарды жазу, функционалды тестілеу жүйесін әзірлеу, орау нұсқауларын зерттеу және т.б. Мен осы қарапайым туындыны еркін қауымдастыққа ұсыну үшін өз жоспарыма жеттім. Санаттар тұжырымдамасы арқылы басқару сияқты арнайы файлдарды басқару күтпеген мәселелер мен проблемаларды тудырады және оларды шешуде vitis айналасында тағы бес жобаны тудырды, олардың кейбіреулері мақалада айтылады. Қазірге дейін vitis Мен графикалық қабықты сатып алған жоқпын, бірақ пәрмен жолындағы файл санаттарын пайдаланудың ыңғайлылығы мен үшін қарапайым графикалық файл менеджерінің кез келген артықшылығынан асып түседі.

Пайдалану мысалдары

Қарапайым бастайық - санат жасаңыз:

vitis create Музыка

Оған мысал ретінде композицияны қосамыз:

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

«Музыка» санатының мазмұнын «көрсету» ішкі командасы арқылы көруге болады:

vitis show Музыка

Сіз оны «ашу» ішкі пәрменін пайдаланып ойнай аласыз.

vitis open Музыка

Өйткені Егер бізде «Музыка» санатында бір ғана файл болса, сол файл ғана іске қосылады. Файлдарды әдепкі бағдарламаларымен ашу үшін мен бөлек қызметтік бағдарлама жасадым vts-fs-ашық (xdg-open немесе mimeopen сияқты стандартты құралдар маған бірқатар себептер бойынша сәйкес келмеді; бірақ, егер бірдеңе болса, параметрлерде әмбебап файлды ашуға арналған басқа қызметтік бағдарламаны көрсетуге болады). Бұл утилита әртүрлі жұмыс орталары бар әртүрлі дистрибутивтерде жақсы жұмыс істейді, сондықтан мен оны витиспен бірге орнатуды ұсынамын.

Сондай-ақ файлдарды ашу үшін бағдарламаны тікелей көрсетуге болады:

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

Каталогтардың орнына санаттар немесе Linux үшін семантикалық файлдық жүйе

«Тағайындау» арқылы қосымша санаттар жасап, файлдарды қосамыз. Егер файлдар әлі жоқ санаттарға тағайындалса, оларды жасау ұсынылады. -yes жалаушасын пайдалану арқылы қажетсіз сұрауды болдырмауға болады.

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

Енді біз «Р статистикалық пакеті: ықтималдық теориясы және математикалық статистика.pdf» файлына «Математика» санатын қосқымыз келеді. Біз бұл файлдың «R» санатына жатқызылғанын білеміз, сондықтан Vitis жүйесінен санат жолын пайдалана аламыз:

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

Бақытымызға орай, bash аяқтау мұны жеңілдетеді.

Әр файл үшін санаттар тізімін көру үшін --categories жалаушасын пайдаланып, не болғанын көрейік:

vitis show R --categories

Каталогтардың орнына санаттар немесе Linux үшін семантикалық файлдық жүйе

Сондай-ақ файлдар пішім, түрі (пішімдерді біріктіреді) және файл кеңейтімі бойынша автоматты түрде санатталғанын ескеріңіз. Қажет болса, бұл санаттарды өшіруге болады. Кейін олардың есімдерін міндетті түрде жерсіндіремін.

Әртүрлілік үшін «Математикаға» тағы бір нәрсе қосайық:

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

Ал қазір жағдай қызық бола бастады. Категориялардың орнына біріктіру, қиылысу және алу амалдары бар өрнектерді жазуға болады, яғни жиындардағы амалдарды қолдануға болады. Мысалы, «Математика» мен «R» қиылысы бір файлға әкеледі.

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

«Математикадан» «R» тіліне сілтемелерді алып тастаймыз:

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

Біз музыка мен R тілін мақсатсыз біріктіре аламыз:

vitis show Музыка u: R

-n жалауы сұрау нәтижесінен қажетті файлдарды сандар және/немесе ауқымдар бойынша «шығаруға» мүмкіндік береді, мысалы, -n 3-7, немесе одан да күрделі нәрсе: -n 1,5,8-10,13. Бұл тізімнен қажетті файлдарды ашуға мүмкіндік беретін ашық ішкі пәрменімен жиі пайдалы.

Каталогтардың орнына санаттар немесе Linux үшін семантикалық файлдық жүйе

Біз кәдімгі каталог иерархиясын пайдаланудан бас тартып жатқанда, кірістірілген санаттар жиі пайдалы. «Математика» санатының астында «Статистика» ішкі санатын жасап, осы санатты тиісті файлға қосамыз:

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

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

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

Каталогтардың орнына санаттар немесе Linux үшін семантикалық файлдық жүйе

Бұл файлда қазір «Математика» емес, «Математика/Статистика» санаты бар екенін көреміз (қосымша сілтемелер бақыланады).

Толық жолды шешу ыңғайсыз болуы мүмкін, «жаһандық» бүркеншік ат жасайық:

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

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

Каталогтардың орнына санаттар немесе Linux үшін семантикалық файлдық жүйе

Жай файлдар ғана емес

Интернет сілтемелері

Кез келген ақпаратты сақтауды бір жүйеге келтіру үшін, кем дегенде, Интернет ресурстарына сілтемелерді санаттарға бөлу пайдалы болар еді. Және бұл мүмкін:

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

Арнайы орында HTML бетінің тақырыбы және .desktop кеңейтімі бар файл жасалады. Бұл GNU/Linux жүйесіндегі дәстүрлі таңбаша пішімі. Мұндай таңбашалар автоматты түрде NetworkBookmarks санатына бөлінеді.

Әрине, таңбашалар пайдалану үшін жасалады:

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

Пәрменді орындау браузерде жаңадан сақталған сілтеменің ашылуына әкеледі. Интернет көздеріне санатталған таңбашалар шолғыш бетбелгілерін ауыстыру ретінде қызмет ете алады.

Файл фрагменттері

Сондай-ақ файлдардың жеке бөліктері үшін санаттар болуы пайдалы. Жаман өтініш емес, иә? Бірақ ағымдағы енгізу әзірге тек қарапайым мәтіндік файлдарға, аудио және бейне файлдарға әсер етеді. Концерттің белгілі бір бөлігін немесе фильмдегі күлкілі сәтті белгілеу керек делік, содан кейін тағайындауды пайдаланған кезде -фрагментті, -бастау, -аяқтау жалауларын қолдануға болады. «DuckTales» скринсейверін сақтайық:

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

vitis open Заставки

Шындығында файлды кесу болмайды, оның орнына файл түрін, файлға жолды, фрагменттің басы мен соңын сипаттайтын фрагментке көрсеткіш файлы жасалады. Фрагменттерге көрсеткіштерді жасау және ашу мен осы мақсаттар үшін арнайы жасаған утилиталарға беріледі - бұл медиафрагментер және фрагплейер. Біріншісі жасайды, екіншісі ашылады. Аудио және бейне жазбалар жағдайында медиа файл VLC ойнатқышы арқылы белгілі бір орыннан белгілі бір орынға дейін іске қосылады, сондықтан ол жүйеде де болуы керек. Бастапқыда мен мұны mpplayer негізінде жасағым келді, бірақ қандай да бір себептермен бұл дұрыс сәтте позициялау өте қисық болды.
Біздің мысалда «Duck Tales intro.fragpointer» файлы жасалады (ол арнайы орынға орналастырылады), содан кейін фрагмент файлдың басынан (жасау кезінде –start көрсетілмегендіктен) 59-ға дейін ойнатылады. екінші белгі, одан кейін VLC жабылады.

Тағы бір мысал, біз атақты әртістің концертіндегі бір спектакльді санаттауды ұйғардық:

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

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

Ашылған кезде файл қажетті орынға қосылады және төрт жарым минуттан кейін жабылады.

Мұның бәрі қалай жұмыс істейді + қосымша мүмкіндіктер

Санаттарды сақтау

Семантикалық файлдық жүйені ұйымдастыру туралы ойлаудың ең басында үш жол ойға келді: символдық сілтемелерді сақтау арқылы, мәліметтер базасы арқылы, XML-де сипаттау арқылы. Бірінші әдіс жеңді, өйткені... бір жағынан, оны жүзеге асыру оңай, ал екінші жағынан, пайдаланушының санаттарды файлдық жүйеден тікелей қарау мүмкіндігі бар (және бұл ыңғайлы және маңызды). Қолданудың басында vitis «Vitis» каталогы және «.config/vitis/vitis.conf» конфигурация файлы пайдаланушының үй каталогында жасалады. Санаттарға сәйкес каталогтар ~/Vitis ішінде жасалады және бастапқы файлдарға символдық сілтемелер осы санат каталогтарында жасалады. Санат бүркеншік аттары да оларға сілтемелер ғана. Әрине, үй каталогында «Vitis» каталогының болуы кейбір адамдарға ұнамауы мүмкін. Біз кез келген басқа орынға ауыса аламыз:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

Белгілі бір сәтте әртүрлі жерлерде шашыраңқы файлдарды санаттаудың мағынасы жоқ екені белгілі болады, өйткені олардың орны өзгеруі мүмкін. Сондықтан, ең алдымен, мен өзім үшін каталог жасадым, онда мен ақымақтықпен бәрін тастап, оған барлық санаттарды бердім. Содан кейін мен бұл сәтті бағдарлама деңгейінде рәсімдеу жақсы болар еді деп шештім. «Файл кеңістігі» түсінігі осылай пайда болды. Қолданудың басында vitis Мұндай орынды дереу орнату (бізге қажет барлық файлдар сонда сақталады) және автосақтауды қосу зиян тигізбейді:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Автоматты сақтаусыз, «тағайындау» ішкі пәрменін пайдаланған кезде қосылған файлды файл кеңістігіне сақтағыңыз келсе, --save жалауы қажет болады.

Сонымен қатар, бірнеше файл кеңістігін қосуға және олардың басымдықтарын өзгертуге болады; бұл файлдар көп болған кезде және олар әртүрлі медиада сақталған кезде пайдалы болуы мүмкін. Мен бұл мүмкіндікті бұл жерде қарастырмаймын; толық ақпаратты бағдарлама анықтамасынан табуға болады.

Семантикалық файлдық жүйені тасымалдау

Қалай болғанда да, Vitis каталогы мен файлдық кеңістіктер теориялық тұрғыдан кейде бір жерден екінші жерге ауыса алады. Оның жұмыс істеуі үшін мен бөлек қызметтік бағдарлама жасадым сілтеме редакторы, ол сілтемелерді жаппай өңдей алады, жол бөліктерін басқалармен ауыстыра алады:

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

Бірінші жағдайда, /mnt/MyFavoriteDisk/Vitis/ ішінен үй каталогына көшкеннен кейін бүркеншік аттармен байланысты символдық сілтемелер өңделеді. Екінші жағдайда, файл кеңістігінің орнын өзгерткеннен кейін, Vitis-тегі барлық сілтемелер олардың жолының бір бөлігін ауыстыру сұранысына сәйкес жаңаларына ауыстырылады.

Автоматты санаттар

Егер сіз пәрменді орындасаңыз vitis service get autocategorization, сіз әдепкі бойынша автоматты санаттар пішім (Пішім және Түр) және файл кеңейтімі (Кеңейтім) бойынша тағайындалғанын көре аласыз.

Бұл, мысалы, PDF файлдарының арасынан бірдеңе табу немесе EPUB және FB2 файлдарынан сақталған нәрселерді қарау қажет болғанда, сұрауды жай ғана іске қосуға болады.

vitis show Format/MOBI u: Format/FB2

Файл немесе миметип сияқты стандартты GNU/Linux құралдары маған дәл сәйкес келмеді, өйткені олар әрқашан пішімді дұрыс анықтамайды; Мен файл қолтаңбалары мен кеңейтімдері негізінде өзімнің іске асыруымды жасауға тура келді. Жалпы, файл пішімдерін анықтау тақырыбы зерттеу үшін қызықты тақырып болып табылады және жеке мақалаға лайық. Әзірге мен әлемдегі барлық форматтарды шынайы тануды қамтамасыз етпедім деп айта аламын, бірақ ол қазірдің өзінде жақсы жұмыс істейді. Рас, EPUB енді форматты ZIP ретінде анықтайды (жалпы алғанда, бұл негізделген, бірақ іс жүзінде бұл қалыпты мінез-құлық деп саналмауы керек). Әзірге бұл мүмкіндікті эксперименттік деп санап, қателер туралы хабарлаңыз. Біртүрлі жағдайларда сіз әрқашан файл кеңейтім санаттарын пайдалана аласыз, мысалы, Extension/epub.

Пішім бойынша автосанаттар қосулы болса, кейбір пішімдерді түрі бойынша топтайтын автосанаттар да қосылады: «Мұрағаттар», «Суреттер», «Бейнелер», «Аудио» және «Құжаттар». Бұл ішкі санаттар үшін локализацияланған атаулар да жасалады.

Не айтылмайды

vitis Бұл өте көп қырлы құрал болып шықты және барлығын бірден қамту қиын. Тағы не істей алатыныңызды қысқаша айтып өтейін:

  • санаттарды файлдардан жоюға және жоюға болады;
  • өрнек сұрауларының нәтижелерін көрсетілген каталогқа көшіруге болады;
  • файлдарды бағдарлама ретінде іске қосуға болады;
  • Көрсету пәрменінде көптеген опциялар бар, мысалы, аты/өзгерту күні немесе рұқсат/өлшем/кеңейту бойынша сұрыптау, файл қасиеттері мен түпнұсқаларға жолды көрсету, жасырын файлдарды көрсетуді қосу және т.б.;
  • Интернет көздеріне сілтемелерді сақтаған кезде HTML беттерінің жергілікті көшірмелерін де сақтауға болады.

Толық мәліметтерді пайдаланушы анықтамасынан табуға болады.

Болашағы

Скептиктер «бұл белгілерді ешкім өзі орнатпайды» деп жиі айтады. Өз мысалымды қолдана отырып, мен керісінше дәлелдей аламын: мен алты мыңнан астам файлды санаттарға бөлдім, мыңнан астам санаттар мен бүркеншік аттарды жасадым және бұл оған тұрарлық болды. Бір команда болғанда vitis open План істер тізімін немесе бір пәрменмен ашыңыз vitis open LaTeX Столяровтың LaTeX орналасу жүйесі туралы кітабын ашқанда, файлдық жүйені «ескі әдіспен» пайдалану моральдық тұрғыдан қиын.

Осының негізінде бірқатар идеялар туындайды. Мысалы, ағымдағы ауа райына, мерекеге, апта күніне, күн немесе жыл уақытына сәйкес тақырыптық музыканы қосатын автоматты радио жасауға болады. Тақырыпқа одан да жақын - санаттар туралы білетін музыка ойнатқышы және жиындардағы сияқты санаттардағы әрекеттермен өрнек арқылы музыка ойнай алады. «Жүктеулер» каталогын бақылайтын және жаңа файлдарды санаттауды ұсынатын демонды жасау пайдалы. Және, әрине, біз қалыпты графикалық семантикалық файл менеджерін жасауымыз керек. Бір кездері мен тіпті файлдарды ұжымдық пайдалану үшін кәсіпорын үшін веб-сервисті жасадым, бірақ ол жоғары өнімділікке қол жеткізсе де, басымдыққа ие болмады және маңызды емес болды. (Үлкен өзгерістерге байланысты vitis, ол енді қолданылмайды.)

міне кішкене демонстрация

Каталогтардың орнына санаттар немесе Linux үшін семантикалық файлдық жүйе

қорытынды

Вит деректермен жұмыс істеу стилін түбегейлі өзгертудің бірінші әрекеті емес, бірақ мен өз идеяларымды жүзеге асыру және GNU GPL лицензиясы бойынша іске асыруды жалпыға қолжетімді ету маңызды деп санадым. Ыңғайлы болу үшін x86-64 үшін deb бумасы жасалды; ол барлық заманауи Debian дистрибутивтерінде жұмыс істеуі керек. ARM-де аздаған қиындықтар болды (барлық басқа бағдарламаларға қатысты vitis, жақсы жұмыс істейді), бірақ болашақта бұл платформа үшін жұмыс пакеті құрастырылады (armhf). Мен Fedora 30 жүйесіндегі мәселелерге және көптеген RPM дистрибутивтеріне таралу қиындығына байланысты RPM пакеттерін жасауды тоқтаттым, бірақ кейінірек пакеттер олардың кем дегенде бірнешеуі үшін жасалады. Осы уақытта сіз пайдалана аласыз make && make install немесе checkinstall.

Назарларыңызға барлығыңызға рахмет! Бұл мақала мен бұл жоба пайдалы болады деп үміттенемін.

Жоба репозиторийіне сілтеме

Ақпарат көзі: www.habr.com

пікір қалдыру