¿Cuál es una buena solución para etiquetar archivos en Linux? [cerrado]


71

He estado buscando una forma de etiquetar mis archivos y buscarlos / filtrarlos según esas etiquetas.

Aquí están mis requisitos ( actualizados ):

  • cualquier archivo legible por el usuario puede etiquetarse libremente
  • un usuario puede buscar archivos que coincidan con una o varias etiquetas
  • los archivos se pueden mover sin perder las etiquetas asociadas anteriormente
  • el sistema podría ser respaldado fácilmente
  • sin dependencias en ningún entorno de escritorio
  • si hay alguna interfaz gráfica de usuario involucrada, debe haber un retroceso de cli

He estado esperando algún sistema básico de hackers y piratería informática para manejar esto, pero aún no he pensado en esto lo suficiente.
Mientras tanto, revisaré beagle y metatracker, que se han mencionado aquí, y veré cómo funcionan.


Ok, beagle tiene enormes dependencias de gnomos, y el rastreador está bien, pero todavía tiene algunas dependencias que no me gustan ...

He estado investigando un poco más, y el camino a seguir podría muy bien ser atributos de archivo extendidos .
Esa es una solución nativa para los sistemas de archivos más recientes, pero aún no están muy bien soportados (la mayoría de los coreutils los destruye por defecto, cp, por ejemplo, necesita el indicador -a para preservarlos). Me gustaría escuchar algunas ideas sobre cómo usarlos mientras pruebo yo mismo algunos trucos, aunque esto podría justificar una nueva pregunta.


2
Problemas con los atributos de archivos extendidos: (i) En mi experiencia, son una molestia cuando desea hacer una copia de seguridad. (ii) No puede usarlos cuando se mueve entre sistemas de archivos. Aparte de eso, serían lo correcto.
Charles Stewart el


En los foros de PC-BSD, con referencia a la edición de 2010 de esta pregunta: PC-BSD, atributos extendidos y etiquetado; Enfoque de OpenMeta y Apple
Graham Perrin

Respuestas:


13

No está claro qué tipo de búsqueda desea. Si desea que funcione en cualquier lugar de Unix, en lugar de solo su directorio de inicio, y solo desea realizar búsquedas basadas en el nombre de ruta, el siguiente esquema es viable, con un poco de piratería de shell y utilizando el estándar locatedb:

  1. Cada directorio que contiene al menos un archivo etiquetado necesita un subdirectorio estándar, por ejemplo .path-tags;
  2. Cada archivo en el directorio $ FILE con enlace $ TAG (que no debe contener el carácter _) tiene un enlace$TAG_$FILE -> ../$FILE

Te dejo los detalles del locate-tagguión; debe ser de dos o tres líneas, utilizando solo el locatecomando y la piratería de shell. (Si está interesado, podría escribir uno).

Algunos de los tipos de KDE hablaron sobre este tipo de esquema para metadatos, aunque no recuerdo los detalles.

También debería ser posible realizar pruebas de examen de contenido más sofisticadas basadas en este esquema con un script similar envuelto find.

Reflexiones sobre requisitos actualizados

  1. cualquier archivo legible por el usuario puede ser etiquetado libremente - Sí, no debería ser un problema
  2. un usuario puede buscar archivos que coincidan con una o varias etiquetas , del mismo modo
  3. los archivos se pueden mover sin perder las etiquetas asociadas anteriormente : los directorios que habitan se pueden mover libremente, pero si el archivo se mueve desde el directorio, estamos en problemas. Si las etiquetas tomaron la forma $TAG_$INODE_$FILEy tenemos una manera eficiente de encontrar qué rutas tienen un inodo dado , entonces podemos hacer esto, perdiendo etiquetas solo si salimos de los sistemas de archivos. Copiar archivos puede causar algunos problemas, y esto es claramente más complicado que mi sugerencia original.
  4. el sistema podría ser respaldado fácilmente , no esencialmente difícil.
  5. sin dependencias en ningún entorno de escritorio : ninguno
  6. si hay alguna interfaz gráfica de usuario involucrada, debe haber un retroceso de cli : ¡ahí es donde vivimos!

Postdata El archivo "búsqueda de inodo inverso" descrito por el enlace (2) que me mostró en su respuesta a (1) se puede utilizar para proporcionar una infraestructura adicional. Podemos ejecutar un servicio en el archivo de búsqueda inversa, que verifica que cada inodo dado en el nombre de archivo de una etiqueta coincida con el inodo del archivo (si corresponde) al que apunta la etiqueta. Si no hay coincidencia, entonces se puede realizar la cirugía requerida (¿el inodo todavía existe? ¿Dónde está?), Y el archivo de búsqueda inversa está mutado o regenerado, y los enlaces simbólicos de la etiqueta se actualizan.

Anticipo un caso complicado: qué pasa si el archivo etiquetado no está donde las etiquetas dicen que debería estar, el archivo de búsqueda inversa dice que todavía existe, pero el archivo pródigo no está donde dice el archivo de búsqueda, el archivo de búsqueda está fuera de ¿fecha? Hay algunas formas de manejar este caso, ninguna obviamente ideal. Aparte de esto, toda esta tarea parece ser el tipo de cosas para las que Perl es ideal ...


1
Esto es bueno, y también he estado pensando en usar enlaces simbólicos. El problema es que un archivo no se puede mover sin perder sus etiquetas. Idealmente, las etiquetas serían independientes de la ruta, y la búsqueda de una etiqueta debería devolver el archivo real, en lugar de un enlace simbólico muerto ... PD: Estoy a favor de una solución basada en shell, pero creo que el dominio del problema hace que sea así. 'd ser bastante doloroso para mantener sólo a través de scripts de shell, espero que alguien me demuestra que están equivocados
Julien

He editado mi pregunta para (con suerte) aclarar qué tipo de solución busco. aplausos
julien

Maldición, nunca me había dado cuenta de que los inodes eran como guías persistentes para archivos, ¡eso es algo para pensar!
julien

1
Los inodes son uids, pero están vinculados a un determinado fs, por lo que no son guids. Esto no es algo malo, ya que copiar, hacer copias de seguridad, archivar, etc. significa que los archivos se duplican y almacenan en otros archivos, y desea que el estado fs le brinde suficiente información para desenredar los resultados.
Charles Stewart el

1
Me perdí el remate, ¿qué software puede acomodar esto? Esperaba algo que pueda usar casualmente sin escribir mi propia infraestructura. (Pero claro para poder
extenderlo

22

Acabo de lanzar un alfa de mi nuevo programa que intenta proporcionar esta funcionalidad. Actualmente cumple con algunos, pero no todos, de sus requisitos. Puede ser de su interés de todos modos. Proporciona una herramienta de línea de comandos para etiquetar y un sistema de archivos virtual para navegar (donde las etiquetas están representadas por directorios).

http://www.tmsu.org/

cualquier archivo legible por el usuario puede etiquetarse libremente

Si.

un usuario puede buscar archivos que coincidan con una o varias etiquetas

Si. Ya sea a través de la herramienta de línea de comandos o navegando por los directorios de etiquetas en el sistema de archivos virtual.

los archivos se pueden mover sin perder las etiquetas asociadas anteriormente

No. Sin embargo, la aplicación almacena las huellas digitales de los archivos etiquetados que se utilizan para ayudar a identificar los archivos movidos. Se proporciona un comando 'reparar' que actualizará las rutas de los archivos movidos. (Obviamente, este mecanismo se rompe si un archivo se mueve y se modifica).

el sistema podría ser respaldado fácilmente

Si. Es un simple archivo de base de datos Sqlite 3.

sin dependencias en ningún entorno de escritorio

Si. Sin dependencias y, como puede ejecutarse como un sistema de archivos virtual, está disponible para examinarlo como un sistema de archivos en cualquier programa que admita enlaces simbólicos.

si hay alguna interfaz gráfica de usuario involucrada, debe haber un retroceso de cli

No hay GUI en este momento.


Se ve muy interesante. ¿Tiene alguna idea de cómo implementar la posibilidad de mover archivos sin perder las etiquetas asociadas?
estudiante

@student: actualmente hay un comando 'reparar' que se ocupa de los archivos movidos y modificados. (Sin embargo, si ambos mueven y modifican un archivo, esto no se detectará).
Paul Ruane

Quizás uno podría escribir variantes de mv, cpy rmque también manejan sus etiquetas (llámelas, por ejemplo tmv, tcpy trm) entonces uno no perdería etiquetas al menos si usa la línea de comando para mover archivos ...
estudiante

@student TMSU ahora incluye algunos scripts que realizan operaciones del sistema de archivos, mientras que mantener la base de datos actualizada: tmsu-fs-mv, tmsu-fs-rmy tmsu-fs-merge.
Paul Ruane

Disculpe mi pregunta pero ... ¿por qué no simplemente clonar etiquetas cuando mueve un archivo automáticamente? ¿Necesito actualizar manualmente los archivos cuando me muevo?
erm3nda

6

Creo que esto podría cumplir con todos sus requisitos. En cualquier caso, es un código genial:

http://pages.stern.nyu.edu/~marriaga/software/oyepa

La GUI requiere Qt, pero hay una aplicación de línea de comandos para la búsqueda y el hecho de que todas las etiquetas estén realmente en el nombre del archivo hace que sea trivial manipular los archivos de etiquetas desde el cli.


1
Desde la página: "La información de la etiqueta se almacena en el nombre del archivo", entonces, ¿cómo son los nombres de los archivos etiquetados? Por cierto, los enlaces en esa página son muy interesantes: +1.
Charles Stewart el

report-for-bill [material de trabajo, hora, producido por mí] .odt
laramichaels

@laramichaels Sé que esto es bastante antiguo, pero el enfoque me pareció muy interesante. Si no fuera por la falta de documentación (en ninguna parte se explica cómo funciona el nombre de archivo), lo adoptaría. Si tiene alguna noticia sobre tales herramientas, hágamelo saber,
TomCho

6

Nadie lo mencionó, pero definitivamente debe mirar los atributos del sistema de archivos extendido. ext4 por ejemplo los tiene. Hay herramientas getfattr y setfattr para tratar con ellos. Por supuesto, tendrá que escribir algunos scripts de shell para buscar archivos etiquetados con sometag. Con respecto a las preguntas mencionadas, todas las respuestas son "Sí". Solo debe tener en cuenta que depende del sistema de archivos.


Los datos de Inode del archivo deben ser definitivamente la forma correcta de hacerlo en un ext4 fs, pero no ofrecerán ninguna compatibilidad con versiones anteriores. ¿Derecho?
erm3nda

6

Sorprendido de que nadie haya mencionado TagSpaces . Cumple con todos sus requisitos porque las etiquetas se almacenan en el nombre del archivo y TagSpaces es multiplataforma.

TagSpaces


1
tagspaces no tiene una reserva de CLI, por lo que no cumple con todos los requisitos. ¿O tiene una CLI? Si es así, por favor, ¡avísame!
TomCho

No hay soporte para la aplicación en Debian 9 apt. ¿Algo viene? - - Puede instalar la aplicación siguiendo estas instrucciones tagspaces.org/products
Léo Léopold Hertz 준영

¿Puede comparar su propuesta con las herramientas de búsqueda de escritorio de Linux?
Léo Léopold Hertz 준영

5

Probablemente no necesite instalar todo el escritorio de KDE para su biblioteca de etiquetado, Nepomuk. Sin embargo, aún tendría que instalar las bibliotecas base de KDE ...


1
si bueno Tenía la esperanza de encontrar una alternativa a esto, pero no se ve tan ...
Julien


2

Prueba Beagle . Me parece que es bastante bueno.

Es posible que no cumpla con todos los requisitos, y no estoy seguro de qué podría. Por ejemplo, ¿los archivos FIFO admiten atributos extendidos? Si no lo hacen, Beagle tiene una base de datos alternativa.


¿Beagle puede manejar archivos no regulares?
Charles Stewart el

@ Charles Stewart: ¿te refieres a archivos que no son de texto?
pcapademic

No, me refiero a archivos de dispositivos, enlaces simbólicos, FIFOs, & c
Charles Stewart

Ese enlace no se refiere a un proyecto sobre organización de documentos.
desvío



1

Por lo tanto, no encontrará la integración de Nepomuk en gnome, en la línea de comandos o en cualquier otro lugar de Linux.

Por el contrario, con Tracker no encontrará la integración kde AFAIK. No estoy seguro sobre CLI.

Desafortunadamente, la respuesta parece ser "no".

Aún más desafortunadamente, esto tampoco significa que haya una buena oportunidad para construir uno. Las utilidades de línea de comandos de Linux no tienen mucho en común con el administrador de archivos GUI, por ejemplo, por lo que arquitectónicamente no hay componentes comunes que se puedan extender para admitir el concepto.


0

Hice un pequeño programa que usa SQLite para este propósito. Resolvió mi necesidad, pero quizás también te ayude:

https://github.com/alvatar/dfym

El único problema con este enfoque es que no se sincroniza con movimientos y eliminaciones, pero resuelve el problema para archivos relativamente estáticos.


0

TMSU

TMSU es una herramienta para etiquetar sus archivos. Proporciona una sencilla utilidad de línea de comandos para aplicar etiquetas y un sistema de archivos virtual para brindarle una vista de sus archivos basada en etiquetas desde cualquier otro programa.

TMSU no altera sus archivos de ninguna manera: permanecen sin cambios en el disco o en la red, donde sea que los coloque. TMSU mantiene su propia base de datos y simplemente obtiene una vista adicional, que puede montar donde desee, en función de las etiquetas que configure.

Sorprendido, nadie lo ha mencionado.


1
te lo perdiste ... es la respuesta más votada
pez globo

-1

Sugiero echar un vistazo a un sistema de control de versiones, como Subversion, para este tipo de características más allá del sistema de archivos. Algunos pueden ser más adecuados para usted que otros, pero en general:

  • Muchos admiten etiquetado (ciertamente subversión).
  • Muchos son multiplataforma; Windows, Mac, Linux, prácticamente todos los Unix.
  • Muchos tienen front-end GUI y clientes de línea de comando.
  • Muchos ya tienen enlaces para su lenguaje de programación / scripting favorito.
  • Muchos son fácilmente respaldados.
  • Muchos están diseñados para ser fácilmente compartibles de una forma u otra.
  • Muchos le permiten controlar el acceso.
  • No tienes que reinventar la rueda.
    • Aprende y usa comandos / herramientas estándar que ya usan millones.
  • Puede instalarlo hoy para su repositorio de SO favorito; apt-get install, yum install
  • También obtienes la gestión de versiones "gratis".

Un ejemplo de cli con Subversion: ~/svn/atestrepository: $ svn propset mytag "something" dir1 property 'mytag' set on 'dir1' $ svn propset myothertag "nothing" dir1/file1 property 'myothertag' set on 'dir1/file1' $ svn propset anemptytag "" dir1/file2 property 'anemptytag' set on 'dir1/file2'

$ svn propget -R mytag dir1 - something ~/svn/atestrepository: $ svn propget -R myothertag dir1/file1 - nothing $ svn propget -R anemptytag dir1/file2 - $ svn proplist dir1/file2 Properties on 'dir1/file2': anemptytag svn:keywords

No recomendaría estas herramientas para archivos binarios grandes (tamaño gigabyte) que cambian regularmente, pero para todo lo demás ya están bien probados y se escalan a tamaños muy grandes.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.