Acabo de publicar una versión alfa de mi nuevo programa que intenta proporcionar esta funcionalidad. Actualmente cumple con algunos, pero no todos, de sus requisitos. Puede que te interese 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 se puede etiquetar libremente
Sí.
un usuario puede buscar archivos que coincidan con una o varias etiquetas
Sí. Ya sea a través de la herramienta de línea de comandos o explorando los directorios de etiquetas en el sistema de archivos virtual.
los archivos se pueden mover sin perder las etiquetas previamente asociadas
No. Sin embargo, la aplicación almacena huellas dactilares de los archivos etiquetados que se utilizan para ayudar a identificar los archivos movidos. Se proporciona un comando de 'reparación' que actualizará las rutas de los archivos movidos. (Obviamente, este mecanismo falla si un archivo se mueve y se modifica).
el sistema podría ser respaldado fácilmente
Sí. Es un simple archivo de base de datos Sqlite 3.
sin dependencias de ningún entorno de escritorio
Sí. Sin dependencias y como se puede ejecutar como un sistema de archivos virtual, está disponible para examinarlo como un sistema de archivos en cualquier programa que admita enlaces simbólicos.
si alguna interfaz gráfica de usuario está involucrada, debe haber un respaldo de cli
Sin GUI en la actualidad.
No está claro qué tipo de búsqueda desea. Si desea que funcione en cualquier parte de Unix, en lugar de solo en su directorio de inicio, y solo desea realizar búsquedas basadas en el nombre de la ruta, el siguiente esquema es viable, con un poco de piratería de shell y usando el estándar locatedb
:
- Cada directorio que contiene al menos un archivo etiquetado necesita un subdirectorio estándar, digamos
.path-tags
; - Cada archivo en el directorio $FILE con enlace $TAG (que no debe contener el carácter
_
) tiene un enlace$TAG_$FILE -> ../$FILE
les dejo los detalles del locate-tag
guión para ti; debe ser de dos o tres líneas, usando solo el locate
piratería de comando y shell. (Si estás interesado, podría escribir uno).
Algunos de los muchachos 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 alrededor de find
.
Reflexiones sobre los requisitos actualizados
- cualquier archivo legible por el usuario se puede etiquetar libremente - Sí, no debería haber problema
- un usuario puede buscar archivos que coincidan con una o varias etiquetas - Del mismo modo
- los archivos se pueden mover sin perder las etiquetas previamente asociadas - Los directorios que habitan se pueden mover libremente, pero si el archivo se mueve del directorio, estamos en problemas. Si las etiquetas tuvieran la forma
$TAG_$INODE_$FILE
y 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. - se puede hacer una copia de seguridad del sistema fácilmente - no es esencialmente difícil.
- sin dependencias de ningún entorno de escritorio - ninguno
- si hay alguna interfaz gráfica de usuario involucrada, debe haber un respaldo de cli - ¡ahí es donde vivimos!
Posdata El archivo de "búsqueda inversa de inodos" descrito en el enlace (2) que me mostró en su respuesta a (1) se puede usar para brindar infraestructura adicional. Podemos ejecutar un servicio en el archivo de búsqueda inversa, que verifica que cada inodo proporcionado en el nombre de archivo de una etiqueta coincida con el inodo del archivo (si corresponde) al que apunta la etiqueta. Si no hay ninguna coincidencia, entonces se puede realizar la cirugía requerida (¿aún existe el inodo? ¿Dónde está?), y el archivo de búsqueda inversa se muta o se regenera, y se actualizan los enlaces simbólicos de la etiqueta.
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 está bien preparado...
Nadie lo mencionó, pero definitivamente debería mirar los atributos del sistema de archivos extendidos. Ext4, por ejemplo, los tiene. hay herramientas getfattr y setfattr para lidiar con ellos. Por supuesto, tendrá que escribir algunos scripts de shell para buscar archivos etiquetados con alguna etiqueta. Con respecto a las preguntas mencionadas, todas las respuestas son "Sí". Solo debe tener en cuenta que depende del sistema de archivos.