Categorías en lugar de directorios ou sistema de ficheiros semántico para Linux

A clasificación de datos en si é un tema de investigación interesante. Encántame recoller información que parece necesaria e sempre tentei crear xerarquías de directorios lóxicos para os meus ficheiros, e un día, nun soño, vin un programa bonito e cómodo para asignar etiquetas aos ficheiros e decidín que non podía vivir. así máis.

O problema dos sistemas de ficheiros xerárquicos

Os usuarios adoitan enfrontarse ao problema de escoller onde gardar o seguinte ficheiro novo e ao problema de atopar os seus propios ficheiros (ás veces os nomes dos ficheiros non están pensados ​​para ser lembrados por unha persoa).

Unha forma de saír da situación poden ser os sistemas de ficheiros semánticos, que adoitan ser un complemento do sistema de ficheiros tradicional. Os directorios neles substitúense por atributos semánticos, tamén chamados etiquetas, categorías e metadatos. Vou usar o termo "categoría" máis a miúdo, porque... No contexto dos sistemas de ficheiros, a palabra "etiqueta" ás veces é un pouco estraña, especialmente cando aparecen "subetiquetas" e "alias de etiquetas".

Asignar categorías aos ficheiros elimina en gran medida o problema de almacenar e buscar un ficheiro: se lembras (ou adiviñas) polo menos unha das categorías asignadas a un ficheiro, entón o ficheiro nunca desaparecerá da vista.

Anteriormente, este tema foi suscitado máis dunha vez en Habré (tempo, два, tres, catro etc.), aquí describo a miña solución.

Camiño á Realización

Inmediatamente despois do mencionado soño, describín no meu caderno a interface de comandos que proporciona o traballo necesario con categorías. Entón decidín que nunha ou dúas semanas podería escribir un prototipo usando Python ou Bash, e despois tería que traballar na creación dun shell gráfico en Qt ou GTK. A realidade, coma sempre, resultou ser moito máis dura, e o desenvolvemento atrasouse.

A idea orixinal era en primeiro lugar facer un programa cunha interface de liña de comandos cómoda e concisa que crease, eliminase categorías, asignase categorías a ficheiros e eliminase categorías dos ficheiros. Chamei ao programa vitis.

Primeiro intento de crear vitis acabou en nada, xa que se empezou a dedicar moito tempo ao traballo e á universidade. O segundo intento xa era algo: para o traballo de fin de máster, conseguín completar o proxecto previsto e mesmo facer un prototipo do shell GTK. Pero esa versión resultou tan pouco fiable e incómoda que houbo que repensar moito.

De feito, usei a terceira versión durante moito tempo, tras transferir varios miles dos meus ficheiros a categorías. Isto tamén foi moi facilitado pola finalización de bash implementada. Pero algúns problemas, como a falta de categorías automáticas e a capacidade de almacenar ficheiros co mesmo nome, aínda permaneceron, e o programa xa estaba dobrado pola súa propia complexidade. Así foi como cheguei á necesidade de resolver problemas complexos de desenvolvemento de software: escribir requisitos detallados, desenvolver un sistema de probas funcionais, estudar instrucións de empaquetado e moito máis. Cheguei agora ao meu plan, para que esta humilde creación poida ser presentada á comunidade libre. A xestión específica de ficheiros como a xestión a través do concepto de categorías suscita cuestións e problemas inesperados, e na súa resolución vitis xerou cinco proxectos máis arredor de si, algúns dos cales mencionaranse no artigo. Ata agora vitis Non merquei un shell gráfico, pero a comodidade de usar categorías de ficheiros desde a liña de comandos xa supera para min as vantaxes dun xestor de ficheiros gráficos normal.

Exemplos de uso

Comecemos sinxelo: crea unha categoría:

vitis create Музыка

Engadímoslle algunha composición como exemplo:

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

Podes ver o contido da categoría "Música" usando o subcomando "mostrar":

vitis show Музыка

Podes xogalo usando o subcomando "abrir".

vitis open Музыка

Porque Se só temos un ficheiro na categoría "Música", só se iniciará ese. Co propósito de abrir ficheiros cos seus programas predeterminados, fixen unha utilidade separada vts-fs-aberto (Ferramentas estándar como xdg-open ou mimeopen non me conviñan por varias razóns; pero, se é o caso, na configuración podes especificar outra utilidade para a apertura universal de ficheiros). Esta utilidade funciona ben en diferentes distribucións con diferentes ambientes de traballo, polo que recomendo instalala xunto con Vitis.

Tamén pode especificar directamente o programa para abrir ficheiros:

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

Categorías en lugar de directorios ou sistema de ficheiros semántico para Linux

Imos crear máis categorías e engadir ficheiros usando "asignar". Se os ficheiros están asignados a categorías que aínda non existen, solicitarase que os cree. Pódese evitar unha solicitude innecesaria usando a marca -yes.

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

Agora queremos engadir a categoría "Matemáticas" ao ficheiro "Paquete estatístico R: teoría da probabilidade e estatística matemática.pdf". Sabemos que este ficheiro xa está categorizado como "R" e, polo tanto, podemos utilizar a ruta da categoría do sistema Vitis:

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

Afortunadamente, a conclusión do bash facilita isto.

Vexamos o que pasou, usando a marca --categories para ver unha lista de categorías para cada ficheiro:

vitis show R --categories

Categorías en lugar de directorios ou sistema de ficheiros semántico para Linux

Teña en conta que os ficheiros tamén se clasificaron automaticamente por formato, tipo (combina formatos) e extensión de ficheiro. Estas categorías pódense desactivar se o desexa. Máis tarde definitivamente localizarei os seus nomes.

Imos engadir algo máis a "Matemáticas" para variedade:

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

E agora as cousas ponse interesantes. En lugar de categorías, podes escribir expresións coas operacións de unión, intersección e resta, é dicir, usar operacións sobre conxuntos. Por exemplo, a intersección de "Matemáticas" con "R" dará lugar a un ficheiro.

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

Imos restar referencias á lingua "R" de "Matemáticas":

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

Podemos combinar sen rumbo a música e a linguaxe R:

vitis show Музыка u: R

A marca -n permítelle "sacar" os ficheiros necesarios do resultado da solicitude por números e/ou intervalos, por exemplo, -n 3-7, ou algo máis complicado: -n 1,5,8-10,13. Moitas veces é útil co subcomando abrir, que che permite abrir os ficheiros desexados dunha lista.

Categorías en lugar de directorios ou sistema de ficheiros semántico para Linux

Aínda que estamos afastando o uso dunha xerarquía de directorios convencional, moitas veces é útil ter categorías aniñadas. Imos crear unha subcategoría "Estatísticas" na categoría "Matemáticas" e engadir esta categoría ao ficheiro apropiado:

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

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

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

Categorías en lugar de directorios ou sistema de ficheiros semántico para Linux

Podemos ver que este ficheiro agora ten a categoría "Matemáticas/Estatísticas" en lugar de "Matemáticas" (se seguen as ligazóns adicionais).

Abordar o camiño completo pode ser inconveniente, creemos un alias "global":

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

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

Categorías en lugar de directorios ou sistema de ficheiros semántico para Linux

Non só ficheiros normais

Ligazóns a Internet

Para unificar o almacenamento de calquera información, sería útil, como mínimo, categorizar as ligazóns a recursos de Internet. E isto é posible:

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

Crearase un ficheiro nun lugar especial coa cabeceira da páxina HTML e a extensión .desktop. Este é o formato de atallo tradicional en GNU/Linux. Estes atallos clasifícanse automaticamente como NetworkBookmarks.

Por suposto, créanse atallos para ser usados:

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

Ao executar o comando fai que a ligazón recentemente gardada se abra no navegador. Os atallos categorizados a fontes de Internet poden servir como substituto dos marcadores do navegador.

Fragmentos de arquivo

Tamén é útil ter categorías para pezas individuais de ficheiros. Non é mala petición, eh? Pero a implementación actual ata agora só afecta a ficheiros de texto sinxelo, ficheiros de audio e vídeo. Digamos que cómpre marcar unha determinada parte dun concerto ou un momento divertido nunha película, entón ao usar assign podes usar as bandeiras -fragname, -start, -finish. Imos gardar o protector de pantalla de "DuckTales":

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

vitis open Заставки

En realidade, non se produce ningún corte de ficheiros; en cambio, créase un ficheiro de punteiro ao fragmento, que describe o tipo de ficheiro, a ruta do ficheiro, o comezo e o final do fragmento. A creación e apertura de punteiros a fragmentos está delegada en utilidades que fixen especialmente para estes propósitos: son mediafragmenter e fragplayer. O primeiro crea, o segundo abre. No caso das gravacións de audio e vídeo, o ficheiro multimedia lánzase desde unha determinada a unha determinada posición mediante o reprodutor VLC, polo que tamén debe estar no sistema. Ao principio quería facelo baseándome en mplayer, pero por algún motivo estaba moi torto co posicionamento no momento adecuado.
No noso exemplo, créase o ficheiro "Duck Tales intro.fragpointer" (colócase nun lugar especial), e despois reprodúcese un fragmento desde o inicio do ficheiro (xa que non se especificou –start ao crear) ata o 59 segunda marca, despois de que VLC pecha.

Outro exemplo é cando decidimos categorizar unha única actuación nun concerto dun artista famoso:

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

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

Cando se abre, o ficheiro incluirase na posición desexada e pecharase despois de catro minutos e medio.

Como funciona todo + funcións adicionais

Almacenamento de categorías

Ao comezar a pensar en organizar un sistema de ficheiros semántico, viñeronme á mente tres formas: a través do almacenamento de ligazóns simbólicas, a través dunha base de datos, a través dunha descrición en XML. O primeiro método gañou, porque... por unha banda, é fácil de implementar e, por outra banda, o usuario ten a oportunidade de mirar categorías directamente desde o sistema de ficheiros (e isto é conveniente e importante). Ao comezo do uso vitis O directorio "Vitis" e o ficheiro de configuración ".config/vitis/vitis.conf" créanse no directorio de inicio do usuario. Os directorios correspondentes ás categorías créanse en ~/Vitis e nestes directorios de categoría créanse ligazóns simbólicas aos ficheiros orixinais. Os alias de categoría tamén son só ligazóns a elas. Por suposto, a presenza do directorio "Vitis" no directorio de inicio pode non atender a algunhas persoas. Podemos cambiar a calquera outro lugar:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

En certo momento, queda claro que ten pouco sentido categorizar ficheiros espallados en diferentes lugares, xa que a súa localización pode cambiar. Polo tanto, para comezar, creei un directorio para min, no que estúpidamente botei todo e dei todas as categorías. Entón decidín que sería bo formalizar este momento a nivel de programa. Así apareceu o concepto de "espazo de ficheiros". Ao comezo do uso vitis Non estaría de máis configurar inmediatamente tal localización (todos os ficheiros que necesitamos almacenaranse alí) e activar o gardado automático:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Sen gardar automaticamente, cando se utiliza o subcomando "asignar", será necesario a marca --save se quere gardar o ficheiro engadido no espazo de ficheiros.

Ademais, pode engadir varios espazos de ficheiros e cambiar as súas prioridades; isto pode ser útil cando hai moitos ficheiros e están almacenados en diferentes soportes. Non vou considerar esta posibilidade aquí; pódense atopar detalles na axuda do programa.

Migración do sistema de ficheiros semántico

De todos os xeitos, o directorio de Vitis e os espazos de ficheiros poden, teoricamente, moverse de un lugar a outro. Para que funcione, creei unha utilidade separada editor de ligazóns, que pode editar en masa ligazóns, substituíndo partes do camiño por outras:

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

No primeiro caso, despois de que nos movemos de /mnt/MyFavoriteDisk/Vitis/ ao directorio de inicio, edítanse as ligazóns simbólicas asociadas aos alias. No segundo caso, despois de cambiar a localización do espazo de ficheiros, todas as ligazóns de Vitis cámbianse a outras novas de acordo coa solicitude de substitución de parte da súa ruta.

Categorías automáticas

Se executa o comando vitis service get autocategorization, podes ver que, por defecto, as categorías automáticas son asignadas por formato (Formato e Tipo) e extensión do ficheiro (Extensión).

Isto é útil cando, por exemplo, necesitas atopar algo entre PDF ou mirar o que almacenaches desde EPUB e FB2, simplemente podes executar a solicitude

vitis show Format/MOBI u: Format/FB2

Aconteceu que as ferramentas estándar de GNU/Linux, como o ficheiro ou o tipo mime, non me conviñan precisamente porque non sempre determinan correctamente o formato; tiven que facer a miña propia implementación baseada en sinaturas e extensións de ficheiros. En xeral, o tema da definición de formatos de ficheiro é un tema interesante para a investigación e merece un artigo aparte. Polo de agora podo dicir que quizais non dei un verdadeiro recoñecemento a todos os formatos do mundo, pero en xeral xa está a funcionar ben. É certo que agora EPUB define o formato como ZIP (en xeral, isto está xustificado, pero na práctica non se debe considerar un comportamento normal). Polo momento, considera esta función como experimental e informa de calquera erro. En situacións estrañas, sempre pode usar categorías de extensións de ficheiros, por exemplo, Extensión/epub.

Se se activan as categorías automáticas por formato, tamén se activan as categorías automáticas que agrupan algúns formatos por tipo: “Arquivos”, “Imaxes”, “Vídeo”, “Audio” e “Documentos”. Tamén se farán nomes localizados para estas subcategorías.

O que non se di

vitis Resultou ser unha ferramenta moi polifacética, e é difícil cubrir todo á vez. Permíteme mencionar brevemente que máis podes facer:

  • as categorías pódense eliminar e eliminar dos ficheiros;
  • os resultados das consultas de expresión pódense copiar no directorio especificado;
  • os ficheiros pódense executar como programas;
  • O comando show ten moitas opcións, por exemplo, ordenar por nome/data de modificación ou acceso/tamaño/extensión, mostrar as propiedades dos ficheiros e camiños aos orixinais, habilitar a visualización de ficheiros ocultos, etc.;
  • Cando garda ligazóns a fontes de Internet, tamén pode gardar copias locais de páxinas HTML.

Podes atopar todos os detalles na axuda do usuario.

Perspectivas

Os escépticos adoitan dicir que "ninguén establecerá estas etiquetas por si mesmo". Empregando o meu propio exemplo, podo demostrar o contrario: xa categorizo ​​máis de seis mil ficheiros, creei máis de mil categorías e alias, e pagou a pena. Cando un equipo vitis open План abra a súa lista de tarefas ou cando teña un comando vitis open LaTeX Cando abres o libro de Stolyarov sobre o sistema de deseño LaTeX, xa é moralmente difícil usar o sistema de ficheiros "á antiga forma".

Sobre esta base, xorden unha serie de ideas. Por exemplo, podes facer unha radio automática que active a música temática segundo o tempo actual, as vacacións, o día da semana, a hora do día ou o ano. Aínda máis preto do tema está un reprodutor de música que sabe sobre categorías e pode reproducir música por expresión con operacións en categorías como nos sets. É útil crear un daemon que supervisará o directorio "Descargas" e ofrecerá categorizar novos ficheiros. E, por suposto, deberíamos facer un xestor de ficheiros semántico gráfico normal. Noutrora mesmo creei un servizo web para a empresa para o uso colectivo de ficheiros, pero non era prioritario e quedou irrelevante, aínda que acadou un alto nivel de rendemento. (Debido aos grandes cambios no vitis, xa non se pode utilizar.)

aquí tes unha pequena demostración

Categorías en lugar de directorios ou sistema de ficheiros semántico para Linux

Conclusión

vitis non é o primeiro intento de cambiar radicalmente o estilo de traballar cos datos, pero considerei importante implementar as miñas ideas e poñer a implementación dispoñible ao público baixo a licenza GNU GPL. Por comodidade, creouse un paquete deb para x86-64; debería funcionar en todas as distribucións Debian modernas. Houbo pequenas dificultades en ARM (mentres que todos os demais programas están relacionados con vitis, funciona ben), pero no futuro compilarase un paquete de traballo para esta plataforma (armhf). Deixei de crear paquetes RPM polo momento debido a problemas en Fedora 30 e á dificultade de estenderse por moitas distribucións RPM, pero aínda se farán paquetes posteriores para polo menos un par deles. Mentres tanto podes usar make && make install ou checkinstall.

Grazas a todos pola vosa atención! Espero que este artigo e este proxecto poidan ser útiles.

Ligazón ao repositorio do proxecto

Fonte: www.habr.com

Engadir un comentario