{"id":35687,"date":"2019-10-31T22:05:46","date_gmt":"2019-10-31T19:05:46","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux\/"},"modified":"2019-10-31T22:05:46","modified_gmt":"2019-10-31T19:05:46","slug":"kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux","title":{"rendered":"Categor\u00edas en lugar de directorios, o un sistema de archivos sem\u00e1ntico para Linux","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>La clasificaci\u00f3n de datos es en s\u00ed misma un tema interesante para la investigaci\u00f3n. Me gusta coleccionar informaci\u00f3n que parece necesaria y siempre he tratado de hacer jerarqu\u00edas l\u00f3gicas de directorios para mis archivos. Una vez, en un sue\u00f1o, vi un programa hermoso y conveniente para asignar etiquetas a los archivos, y decid\u00ed que no pod\u00eda seguir viviendo as\u00ed.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"problema-ierarhicheskih-faylovyh-sistem\">El problema de los sistemas de archivos jer\u00e1rquicos<\/h1>\n<p><\/p>\n<p>Los usuarios a menudo se enfrentan al dilema de d\u00f3nde guardar el nuevo archivo y al problema de encontrar sus propios archivos (a veces los nombres de los archivos ni siquiera est\u00e1n dise\u00f1ados para ser recordados por un ser humano).<\/p>\n<p><\/p>\n<p>Una soluci\u00f3n puede ser los sistemas de archivos sem\u00e1nticos, que generalmente son una capa sobre el sistema de archivos tradicional. En ellos, los directorios se reemplazan por atributos sem\u00e1nticos, tambi\u00e9n llamados etiquetas, categor\u00edas o metadatos. Usar\u00e9 m\u00e1s a menudo el t\u00e9rmino \u00abcategor\u00eda\u00bb, ya que en el contexto de sistemas de archivos la palabra \u00abetiqueta\u00bb a veces suena extra\u00f1a, especialmente cuando aparecen \u00absubetiquetas\u00bb y \u00absin\u00f3nimos de etiquetas\u00bb.<\/p>\n<p><\/p>\n<p>Asignar categor\u00edas a los archivos elimina en gran medida los problemas de almacenamiento y b\u00fasqueda de archivos: si recuerdas (o sospechas) al menos una de las categor\u00edas asignadas al archivo, este nunca desaparecer\u00e1 de la vista.<\/p>\n<p><\/p>\n<p>Anteriormente, este tema se ha abordado varias veces en Habr\u00e9 (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/27581\/\">uno<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/337202\/\">dos<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/374465\/\">tres<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/81352\/\">cuatro<\/a><\/noindex> y otros), aqu\u00ed describo mi soluci\u00f3n.<\/p>\n<p><\/p>\n<h1 id=\"put-k-realizacii\">El camino hacia la implementaci\u00f3n<\/h1>\n<p><\/p>\n<p>Justo despu\u00e9s del mencionado sue\u00f1o, describ\u00ed en un cuaderno una interfaz de l\u00ednea de comandos que proporcionar\u00eda la funcionalidad necesaria para trabajar con categor\u00edas. Entonces decid\u00ed que en una o dos semanas podr\u00eda escribir un prototipo utilizando Python o Bash, y luego tendr\u00eda que trabajar en la creaci\u00f3n de una interfaz gr\u00e1fica con Qt o GTK. La realidad, como siempre, result\u00f3 ser mucho m\u00e1s dura y el desarrollo se alarg\u00f3.<\/p>\n<p><\/p>\n<p>La idea inicial era crear un programa con una interfaz de l\u00ednea de comandos c\u00f3moda y concisa que permitiera crear y eliminar categor\u00edas, asignar categor\u00edas a archivos y eliminar categor\u00edas de archivos. Llam\u00e9 al programa <em>vitis<\/em>.<\/p>\n<p><\/p>\n<p>El primer intento de crear <em>vitis<\/em> termin\u00f3 en nada, ya que se comenz\u00f3 a invertir mucho tiempo en el trabajo y la universidad. El segundo intento fue algo m\u00e1s: logr\u00e9 completar el proyecto que hab\u00eda planeado para la tesis de maestr\u00eda e incluso hacer un prototipo de la interfaz GTK. Pero esa versi\u00f3n result\u00f3 ser tan poco confiable y poco pr\u00e1ctica, que tuve que repensar muchas cosas.<\/p>\n<p><\/p>\n<p>En la tercera versi\u00f3n, ya la utilic\u00e9 yo mismo durante mucho tiempo, clasificando varios miles de mis archivos. Esto fue favorecido en gran medida por la auto-completaci\u00f3n de bash implementada. Pero algunos problemas, como la falta de categor\u00edas autom\u00e1ticas y la posibilidad de almacenar archivos con el mismo nombre, segu\u00edan existiendo, y el programa ya estaba colapsando bajo su propia complejidad. As\u00ed llegu\u00e9 a la necesidad de resolver los problemas del desarrollo de software complejo: escribir requisitos detallados, desarrollar un sistema de pruebas funcionales, estudiar gu\u00edas sobre empaquetado y mucho m\u00e1s. Ahora he llegado a lo planeado, as\u00ed que esta modesta creaci\u00f3n puede ser presentada a la comunidad libre. Esta gesti\u00f3n de archivos tan espec\u00edfica, como la gesti\u00f3n a trav\u00e9s del concepto de categor\u00edas, plantea cuestiones y problemas inesperados, y en su resoluci\u00f3n. <em>vitis<\/em> gener\u00f3 a su alrededor cinco proyectos m\u00e1s, algunos de ellos se mencionar\u00e1n en el art\u00edculo. Hasta hoy. <em>vitis<\/em> no he adquirido una interfaz gr\u00e1fica, pero la comodidad de usar categor\u00edas de archivos desde la l\u00ednea de comandos ya supera para m\u00ed cualquier ventaja de un administrador de archivos gr\u00e1fico convencional.<\/p>\n<p><\/p>\n<h1 id=\"primery-ispolzovaniya\">Ejemplos de uso<\/h1>\n<p><\/p>\n<p>Comencemos con algo sencillo: crearemos una categor\u00eda:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis create M\u00fasica<\/code><\/pre>\n<p><\/p>\n<p>Agreguemos para ejemplo alguna composici\u00f3n:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign M\u00fasica -f \"The Ink Spots - I Don't Want To Set The World On Fire.mp3\"<\/code><\/pre>\n<p><\/p>\n<p>Se puede ver el contenido de la categor\u00eda \u00abM\u00fasica\u00bb con el subcomando \u00abshow\u00bb:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis show M\u00fasica<\/code><\/pre>\n<p><\/p>\n<p>Se puede reproducir con el subcomando \u00abopen\u00bb<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis open M\u00fasica<\/code><\/pre>\n<p><\/p>\n<p>Dado que en nuestra categor\u00eda \u00abM\u00fasica\u00bb hay solo un archivo, solo se ejecutar\u00e1 \u00e9l. Para abrir archivos con sus programas predeterminados he creado una herramienta separada. <em>vts-fs-open<\/em> (los medios est\u00e1ndar como xdg-open o mimeopen no me satisfac\u00edan por varias razones; pero, si deseas, en la configuraci\u00f3n puedes especificar otra utilidad para abrir archivos de manera universal). Esta utilidad funciona bastante bien en diferentes distribuciones con diferentes entornos de escritorio, por lo que recomiendo instalarla junto con vitis.<\/p>\n<p><\/p>\n<p>Tambi\u00e9n se puede especificar directamente el programa para abrir archivos:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis open M\u00fasica --app qmmp<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Categor\u00edas en lugar de directorios, o un sistema de archivos sem\u00e1ntico para Linux\" src=\"\/wp-content\/uploads\/2019\/06\/4823ff69e03b2e8b9986eedfe0604a9d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vamos a crear m\u00e1s categor\u00edas y a a\u00f1adir archivos utilizando \u00abassign\u00bb. Si los archivos se asignan a categor\u00edas que a\u00fan no existen, se solicita su creaci\u00f3n. Se puede evitar la solicitud adicional usando la bandera \u2014yes.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign Programaci\u00f3n R -f \"Introducci\u00f3n a R.pdf\" \"Paquete estad\u00edstico R: teor\u00eda de probabilidades y estad\u00edstica.pdf\" --yes<\/code><\/pre>\n<p><\/p>\n<p>Ahora queremos a\u00f1adir al archivo \u00abPaquete estad\u00edstico R: teor\u00eda de la probabilidad y estad\u00edstica matem\u00e1tica.pdf\u00bb la categor\u00eda \u00abMatem\u00e1ticas\u00bb. Sabemos que este archivo ya tiene la categor\u00eda \u00abR\u00bb y por lo tanto podemos usar la ruta de categor\u00eda del sistema Vitis:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign Matem\u00e1ticas -v \"R\/Paquete estad\u00edstico R: teor\u00eda de probabilidades y estad\u00edstica.pdf\"<\/code><\/pre>\n<p><\/p>\n<p>Afortunadamente, la autocompleci\u00f3n de bash permitir\u00e1 hacer esto f\u00e1cilmente.<\/p>\n<p><\/p>\n<p>Veamos lo que hemos conseguido utilizando la bandera \u2014categories para ver la lista de categor\u00edas de cada archivo:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis show R --categories<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Categor\u00edas en lugar de directorios, o un sistema de archivos sem\u00e1ntico para Linux\" src=\"\/wp-content\/uploads\/2019\/06\/7bbaf561e6efe407ec8dfcda3a89c3b8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ten en cuenta que tambi\u00e9n se han asignado categor\u00edas autom\u00e1ticas a los archivos seg\u00fan el formato, tipo (combinando formatos) y extensi\u00f3n de los archivos. Estas categor\u00edas se pueden desactivar si se desea. M\u00e1s adelante, definitivamente har\u00e9 la localizaci\u00f3n de sus nombres.<\/p>\n<p><\/p>\n<p>Agreguemos algo m\u00e1s a \u00abMatem\u00e1ticas\u00bb para variar:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign Matem\u00e1ticas -f \"An\u00e1lisis matem\u00e1tico - 1984.pdf\" Perelman_Matem\u00e1ticas_interesantes_1927.djvu <\/code><\/pre>\n<p><\/p>\n<p>Y ahora comienza lo interesante. En lugar de categor\u00edas, se pueden escribir expresiones con operaciones de uni\u00f3n, intersecci\u00f3n y diferencia, es decir, usar operaciones sobre conjuntos. Por ejemplo, la intersecci\u00f3n de \u00abMatem\u00e1ticas\u00bb con \u00abR\u00bb dar\u00e1 como resultado un archivo.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis show R i: Matem\u00e1ticas<\/code><\/pre>\n<p><\/p>\n<p>Restemos de \u00abMatem\u00e1ticas\u00bb las menciones al lenguaje \u00abR\u00bb:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis show Matem\u00e1ticas R  #o vitis show Matem\u00e1ticas c: R<\/code><\/pre>\n<p><\/p>\n<p>Podemos combinar sin rumbo la m\u00fasica y el lenguaje R:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis show M\u00fasica u: R<\/code><\/pre>\n<p><\/p>\n<p>La bandera -n permite \u00abextraer\u00bb de los resultados de la consulta los archivos necesarios por n\u00fameros y\/o rangos, por ejemplo, <code>-n 3-7<\/code>, o algo m\u00e1s complejo: <code>-n 1,5,8-10,13<\/code>. A menudo es \u00fatil con el subcomando open, que permite abrir los archivos necesarios de la lista.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Categor\u00edas en lugar de directorios, o un sistema de archivos sem\u00e1ntico para Linux\" src=\"\/wp-content\/uploads\/2019\/06\/5e9181a711a88368b38d8cd2f2e628f4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aunque nos estamos alejando del uso de la jerarqu\u00eda de directorios com\u00fan, a menudo es \u00fatil tener categor\u00edas anidadas. Crearemos la subcategor\u00eda \u00abEstad\u00edstica\u00bb bajo la categor\u00eda \u00abMatem\u00e1ticas\u00bb y a\u00f1adiremos esta categor\u00eda al archivo correspondiente:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis create Matem\u00e1ticas\/Estad\u00edstica\n\nvitis assign Matem\u00e1ticas\/Estad\u00edstica -v \"R\/Introducci\u00f3n a R.pdf\"\n\nvitis show Matem\u00e1ticas --categories<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Categor\u00edas en lugar de directorios, o un sistema de archivos sem\u00e1ntico para Linux\" src=\"\/wp-content\/uploads\/2019\/06\/0bb3381f35cfa2fce381ecc66a62701f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Podemos ver que este archivo ahora tiene la categor\u00eda \u00abMatem\u00e1ticas\/Estad\u00edstica\u00bb en lugar de \u00abMatem\u00e1ticas\u00bb (los enlaces adicionales se rastrean).<\/p>\n<p><\/p>\n<p>Acceder por la ruta completa puede ser inc\u00f3modo, as\u00ed que crearemos un apodo 'global':<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign Matem\u00e1ticas\/Estad\u00edstica -a Estad\u00edstica\n\nvitis show Estad\u00edstica<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Categor\u00edas en lugar de directorios, o un sistema de archivos sem\u00e1ntico para Linux\" src=\"\/wp-content\/uploads\/2019\/06\/619c27802802fd93594d3c0050dd78e8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"ne-tolko-obychnye-fayly\">No solo archivos comunes<\/h2>\n<p><\/p>\n<h3 id=\"internet-ssylki\">Enlaces de Internet<\/h3>\n<p><\/p>\n<p>Para unificar el almacenamiento de cualquier informaci\u00f3n, ser\u00eda \u00fatil, al menos, categorizar los enlaces a recursos de Internet. Y es posible:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign Habr ColorAnomal\u00eda -i https:\/\/habr.com\/es\/company\/sfe_ru\/blog\/437304\/ --yes<\/code><\/pre>\n<p><\/p>\n<p>En un lugar especial se crear\u00e1 un archivo con el t\u00edtulo de la p\u00e1gina HTML y con la extensi\u00f3n .desktop. Este es el formato tradicional de acceso directo en GNU\/Linux. Estos accesos directos reciben autom\u00e1ticamente la categor\u00eda NetworkBookmarks.<\/p>\n<p><\/p>\n<p>Naturalmente, los accesos directos se crean para ser utilizados:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis open ColorAnomal\u00eda<\/code><\/pre>\n<p><\/p>\n<p>La ejecuci\u00f3n del comando provoca que se abra en el navegador el enlace que se guard\u00f3 recientemente. Los accesos directos categorizados a las fuentes de Internet pueden servir como reemplazo de los marcadores del navegador.<\/p>\n<p><\/p>\n<h3 id=\"fragmenty-faylov\">Fragmentos de archivos<\/h3>\n<p><\/p>\n<p>Tambi\u00e9n es \u00fatil tener categor\u00edas para fragmentos individuales de archivos. Buena propuesta, \u00bfverdad? Pero la implementaci\u00f3n actual solo aborda archivos de texto comunes, as\u00ed como archivos de audio y video. Supongamos que necesitas marcar un momento espec\u00edfico de un concierto o una parte divertida de una pel\u00edcula, entonces al usar assign puedes aprovechar las banderas --fragname, --start, --finish. Guardemos la introducci\u00f3n de 'Duck Tales':<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign vitis assign -c Introducciones -f Duck_Tales\/s01s01.avi --finish 00:00:59 --fragname \"Introducci\u00f3n de Duck Tales\"\n\nvitis open Introducciones<\/code><\/pre>\n<p><\/p>\n<p>En realidad, no se est\u00e1 cortando ning\u00fan archivo, en su lugar se crea un archivo de puntero a un fragmento, en el cual se describe el tipo de archivo, la ruta del archivo, el inicio y el fin del fragmento. La creaci\u00f3n y apertura de punteros a fragmentos se delega a utilidades que he creado espec\u00edficamente para estos fines: mediafragmenter y fragplayer. El primero crea, el segundo abre. En el caso de grabaciones de audio y video, la reproducci\u00f3n del archivo multimedia desde una posici\u00f3n determinada hasta otra se realiza mediante el reproductor VLC, as\u00ed que este tambi\u00e9n debe estar en el sistema. Al principio quer\u00eda hacerlo basado en mplayer, pero por alguna raz\u00f3n ten\u00eda problemas con el posicionamiento en el momento necesario.<br \/>\nEn nuestro ejemplo, se crea un archivo 'Duck Tales intro.fragpointer' (que se coloca en un lugar especial), y luego se reproduce el fragmento desde el inicio del archivo (ya que --start no se indic\u00f3 al crearlo) hasta una marca de 59 segundos, despu\u00e9s de lo cual VLC se cierra.<\/p>\n<p><\/p>\n<p>Otro ejemplo ser\u00eda clasificar una actuaci\u00f3n espec\u00edfica en un concierto de alg\u00fan artista famoso:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign \u041b\u0435\u043f\u0441 \"\u0421\u043f\u0430\u0441\u0438\u0442\u0435 \u043d\u0430\u0448\u0438 \u0434\u0443\u0448\u0438\" -f \u0413\u0440\u0438\u0433\u043e\u0440\u0438\u0439 \u041b\u0435\u043fc - \u041a\u043e\u043d\u0446\u0435\u0440\u0442 \u041f\u0430\u0440\u0443\u0441 - \u043f\u0435\u0441\u043d\u0438 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440\u0430 \u0412\u044b\u0441\u043e\u0446\u043a\u043e\u0433\u043e.mp4 --fragname \"\u0421\u043f\u0430\u0441\u0438\u0442\u0435 \u043d\u0430\u0448\u0438 \u0434\u0443\u0448\u0438\" --start 00:32:18 --finish 00:36:51\n\nvitis open \"\u0421\u043f\u0430\u0441\u0438\u0442\u0435 \u043d\u0430\u0448\u0438 \u0434\u0443\u0448\u0438\"<\/code><\/pre>\n<p><\/p>\n<p>Al abrir, el archivo se incluir\u00e1 en la posici\u00f3n correcta y se cerrar\u00e1 despu\u00e9s de cuatro minutos y medio.<\/p>\n<p><\/p>\n<h1 id=\"kak-eto-vsyo-rabotaet--dopolnitelnye-vozmozhnosti\">C\u00f3mo funciona todo esto + funcionalidades adicionales<\/h1>\n<p><\/p>\n<h2 id=\"hranenie-kategoriy\">Almacenamiento de categor\u00edas<\/h2>\n<p><\/p>\n<p>Al inicio del dise\u00f1o de un sistema de archivos sem\u00e1ntico, se me ocurrieron tres m\u00e9todos: mediante el almacenamiento de enlaces simb\u00f3licos, a trav\u00e9s de una base de datos, y mediante una descripci\u00f3n en XML. Gan\u00f3 el primer m\u00e9todo, ya que, por un lado, es f\u00e1cil de implementar, y por otro, el usuario tiene la posibilidad de ver las categor\u00edas directamente desde el sistema de archivos (lo cual es conveniente e importante). Al principio de su uso <em>vitis<\/em> En el directorio personal del usuario se crea un directorio 'Vitis' y un archivo de configuraci\u00f3n '.config\/vitis\/vitis.conf'. En ~\/Vitis se crean directorios que corresponden a las categor\u00edas, y en esos directorios-categor\u00edas se crean enlaces simb\u00f3licos a los archivos originales. Los apodos de categor\u00edas son tambi\u00e9n simplemente enlaces a ellos. Por supuesto, la existencia del directorio 'Vitis' en el directorio personal puede no ser del agrado de algunos. Podemos cambiar a cualquier otro lugar:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis service set path \\\/mnt\\\/MyFavoriteDisk\\\/Vitis\\\/<\/code><\/pre>\n<p><\/p>\n<p>En cierto momento se hace evidente que categorizar archivos dispersos en diferentes lugares tiene poco sentido, ya que su ubicaci\u00f3n puede cambiar. Por lo tanto, al principio cre\u00e9 un directorio donde simplemente colocaba todo y le daba categor\u00edas a eso. Despu\u00e9s decid\u00ed que ser\u00eda bueno formalizar esto a nivel de programaci\u00f3n. As\u00ed naci\u00f3 el concepto de 'espacio de archivos'. Al principio de su uso. <em>vitis<\/em> no estar\u00eda de m\u00e1s configurar un lugar como este (donde se almacenar\u00e1n todos los archivos que necesitamos) e incluir el guardado autom\u00e1tico:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis service add filespace \\\/mnt\\\/MyFavoriteDisk\\\/Filespace\\\/\n\nvitis service set autosave yes<\/code><\/pre>\n<p><\/p>\n<p>Sin auto-guardado al utilizar el subcomando &#171;assign&#187;, se requerir\u00e1 la bandera &#8212;save, si se desea guardar el archivo agregado en el espacio de archivos.<\/p>\n<p><\/p>\n<p>Adem\u00e1s, se pueden agregar varios espacios de archivos y cambiar su prioridad, lo cual puede ser \u00fatil cuando hay muchos archivos y est\u00e1n almacenados en diferentes dispositivos. Aqu\u00ed no revisar\u00e9 esta posibilidad, los detalles se pueden leer en la ayuda del programa.<\/p>\n<p><\/p>\n<h2 id=\"migraciya-semanticheskoy-faylovoy-sistemy\">Migraci\u00f3n del sistema de archivos sem\u00e1ntico<\/h2>\n<p><\/p>\n<p>De una forma u otra, el directorio Vitis y los espacios de archivos te\u00f3ricamente pueden moverse de un lugar a otro. Para hacerlos funcionar he creado una utilidad separada <em>link-editor<\/em>, que puede editar enlaces en masa, reemplazando partes de la ruta por otras:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">cp -r \/mnt\/MyFavoriteDisk\/Vitis\/ ~\/Vitis\nlink-editor -d ~\/Vitis\/ -f \/mnt\/MyFavoriteDisk\/Vitis\/ -r ~\/Vitis\/ -R\ncp -r \/mnt\/MyFavoriteDisk\/Filespace\/ ~\/MyFiles\nlink-editor -d ~\/Vitis\/ -f \/mnt\/FlashDrive-256\/Filespace\/ -r ~\/MyFiles -R<\/code><\/pre>\n<p><\/p>\n<p>En el primer caso, despu\u00e9s de movernos de \/mnt\/MyFavoriteDisk\/Vitis\/ al directorio personal, se editan los enlaces simb\u00f3licos asociados con los alias. En el segundo caso, despu\u00e9s de cambiar la ubicaci\u00f3n del espacio de archivos, se actualizan todos los enlaces en Vitis a los nuevos conforme a la solicitud de reemplazo de parte de su ruta.<\/p>\n<p><\/p>\n<h2 id=\"avtomaticheskie-kategorii\">Categor\u00edas autom\u00e1ticas<\/h2>\n<p><\/p>\n<p>Si se ejecuta el comando <code>vitis service get autocategorization<\/code>, se puede ver que por defecto est\u00e1 configurada la asignaci\u00f3n de categor\u00edas autom\u00e1ticas por formato (Format y Type) y extensi\u00f3n de archivos (Extension).<\/p>\n<p><\/p>\n<p>Esto es \u00fatil, por ejemplo, cuando necesitas encontrar algo entre PDFs o mirar lo que tienes almacenado de EPUB y FB2, simplemente puedes ejecutar la consulta<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis show Format\/MOBI u: Format\/FB2<\/code><\/pre>\n<p><\/p>\n<p>Resulta que las herramientas est\u00e1ndar de GNU\/Linux como file o mimetype no me satisfacen precisamente porque no siempre determinan correctamente el formato, as\u00ed que tuve que crear mi propia implementaci\u00f3n basada en las firmas de archivos y extensiones. En general, el tema de la identificaci\u00f3n de formatos de archivos es un asunto interesante para investigar y merece un art\u00edculo aparte. Por ahora puedo decir que, aunque quiz\u00e1s no he previsto un reconocimiento preciso para todos los formatos en el mundo, en general, ya est\u00e1 funcionando bastante bien. Aunque, para el EPUB, actualmente se identifica el formato como ZIP (lo cual es razonable, pero en la pr\u00e1ctica no deber\u00eda considerarse un comportamiento normal). Hasta cierto punto, consideren esta funci\u00f3n como experimental y por favor, reporten los errores. En situaciones extra\u00f1as, siempre se pueden usar categor\u00edas por extensi\u00f3n de archivos, por ejemplo, Extension\/epub.<\/p>\n<p><\/p>\n<p>Si las autocategor\u00edas por formato est\u00e1n habilitadas, tambi\u00e9n estar\u00e1n activas las autocategor\u00edas que agrupan algunos formatos como: &#171;Archives&#187;, &#171;Pictures&#187;, &#171;Video&#187;, &#171;Audio&#187; y &#171;Documents&#187;. Para estas subcategor\u00edas tambi\u00e9n se crear\u00e1n nombres localizados.<\/p>\n<p><\/p>\n<h1 id=\"o-chyom-ne-skazano\">De lo que no se dice<\/h1>\n<p><\/p>\n<p><em>vitis<\/em> se convirti\u00f3 en una herramienta muy vers\u00e1til y es dif\u00edcil abarcar todo de una vez. Mencionar\u00e9 brevemente lo que a\u00fan se puede hacer:<\/p>\n<p><\/p>\n<ul>\n<li>se pueden eliminar categor\u00edas y desasociarlas de los archivos;<\/li>\n<li>los resultados de las consultas se pueden copiar en el directorio indicado;<\/li>\n<li>los archivos se pueden ejecutar como programas;<\/li>\n<li>el comando show tiene muchas opciones, por ejemplo, ordenar por nombre\/fecha de modificaci\u00f3n o acceso\/tama\u00f1o\/extensi\u00f3n, mostrar propiedades de archivos y rutas a los originales, incluir la visualizaci\u00f3n de archivos ocultos, entre otros;<\/li>\n<li>al guardar enlaces a fuentes de Internet, tambi\u00e9n se pueden guardar copias locales de las p\u00e1ginas HTML.<\/li>\n<\/ul>\n<p><\/p>\n<p>Todos los detalles se pueden encontrar en la ayuda del usuario.<\/p>\n<p><\/p>\n<h1 id=\"perspektivy\">Perspectivas<\/h1>\n<p><\/p>\n<p>A menudo los esc\u00e9pticos dicen que &#171;nadie va a colocar esas etiquetas manualmente&#187;. Con mi propia experiencia puedo demostrar lo contrario: ya he categorizado m\u00e1s de seis mil archivos, he creado m\u00e1s de mil categor\u00edas y seud\u00f3nimos, y vali\u00f3 la pena. Cuando abres <code>vitis open Plan<\/code> abres la lista de tus tareas o cuando con un solo comando <code>vitis open LaTeX<\/code> el libro de Stolyarov sobre el sistema de maquetaci\u00f3n LaTeX, ya es dif\u00edcil moralmente utilizar el sistema de archivos &#171;a la antigua&#187;.<\/p>\n<p><\/p>\n<p>A partir de esto surgen varias ideas. Por ejemplo, se podr\u00eda hacer una radio autom\u00e1tica que reproduzca m\u00fasica tem\u00e1tica de acuerdo con el clima actual, festividad, d\u00eda de la semana, hora del d\u00eda o del a\u00f1o. Tambi\u00e9n relacionado con el tema est\u00e1 un reproductor musical que conoce las categor\u00edas y puede reproducir m\u00fasica seg\u00fan expresiones con operaciones sobre categor\u00edas como si fueran conjuntos. Ser\u00eda \u00fatil hacer un demonio que vigile la carpeta &#171;Descargas&#187; y que ofrezca categorizar nuevos archivos. Y, por supuesto, ser\u00eda necesario crear un gestor de archivos sem\u00e1ntico gr\u00e1fico adecuado. Alguna vez incluso hice un servicio web para la empresa para el uso colectivo de archivos, pero no fue prioritario y se volvi\u00f3 obsoleto, aunque alcanz\u00f3 un alto nivel de funcionalidad. (Debido a los grandes cambios en el mismo) <em>vitis<\/em>, ya no es utilizable.)<\/p>\n<p>\n<b class=\"spoiler_title\">aqu\u00ed hay una peque\u00f1a demostraci\u00f3n<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Categor\u00edas en lugar de directorios, o un sistema de archivos sem\u00e1ntico para Linux\" src=\"\/wp-content\/uploads\/2019\/06\/0a8e3829424135a6bf9390d2b2654499.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Conclusi\u00f3n<\/h1>\n<p><\/p>\n<p><em>Vitis<\/em> \u2014 no es el primer intento de cambiar radicalmente el estilo de trabajo con los datos, pero consider\u00e9 importante implementar mis ideas y publicar la implementaci\u00f3n de forma abierta bajo la licencia GNU GPL. Para mayor comodidad, se ha hecho un paquete deb para x86-64, deber\u00eda funcionar en todas las distribuciones Debian modernas. En ARM surgieron algunas complicaciones (sin embargo, todos los dem\u00e1s programas relacionados con <em>vitis<\/em>, funcionan correctamente), pero m\u00e1s adelante tambi\u00e9n se ensamblar\u00e1 un paquete funcional para esta plataforma (armhf). He dejado de crear paquetes RPM por problemas con Fedora 30 y la dificultad de diversificarme en muchas distribuciones RPM, pero m\u00e1s adelante se crear\u00e1n paquetes al menos para un par de ellas. Por ahora se puede usar <code>make &amp;&amp; make install<\/code> o <code>checkinstall<\/code>.<\/p>\n<p><\/p>\n<p>\u00a1Gracias a todos por su atenci\u00f3n! Espero que este art\u00edculo y este proyecto puedan ser \u00fatiles.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/tech.vindex\/vitis\">Enlace al repositorio del proyecto<\/a><\/noindex><\/p>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/457328\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439. \u042f \u043b\u044e\u0431\u043b\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043a\u0430\u0436\u0443\u0449\u0443\u044e\u0441\u044f \u043d\u0443\u0436\u043d\u043e\u0439, \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0438 \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u0432\u043e \u0441\u043d\u0435 \u044f \u0443\u0432\u0438\u0434\u0435\u043b \u043a\u0440\u0430\u0441\u0438\u0432\u0443\u044e \u0438 \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u044d\u0433\u043e\u0432 \u0444\u0430\u0439\u043b\u0430\u043c, \u0438 \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0442\u0430\u043a \u0436\u0438\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0447\u0430\u0441\u0442\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26733,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35687","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439, \u0438\u043b\u0438 \u0421\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f Linux | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:05:46+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:05:46+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Categor\u00edas en lugar de directorios, o Sistema de archivos sem\u00e1ntico para Linux | ProHoster","description":"La clasificaci\u00f3n de datos es en s\u00ed misma un tema interesante para la investigaci\u00f3n.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439, \u0438\u043b\u0438 \u0421\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f Linux | ProHoster","og:description":"\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:05:46+00:00","article:modified_time":"2019-10-31T19:05:46+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35687","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 00:23:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:57:46","updated":"2026-01-22 00:23:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/35687","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=35687"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/35687\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/26733"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=35687"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=35687"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=35687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}