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.
fuente
Respuestas:
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
:.path-tags
;_
) tiene un enlace$TAG_$FILE -> ../$FILE
Te dejo los detalles del
locate-tag
guión; debe ser de dos o tres líneas, utilizando solo ellocate
comando 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
$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.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 ...
fuente
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/
Si.
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.
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).
Si. Es un simple archivo de base de datos Sqlite 3.
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.
No hay GUI en este momento.
fuente
mv
,cp
yrm
que también manejan sus etiquetas (llámelas, por ejemplotmv
,tcp
ytrm
) entonces uno no perdería etiquetas al menos si usa la línea de comando para mover archivos ...tmsu-fs-mv
,tmsu-fs-rm
ytmsu-fs-merge
.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.
fuente
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.
fuente
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.
fuente
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 ...
fuente
Este reciente artículo sobre las herramientas de búsqueda de escritorio de Linux menciona que Tracker admite el etiquetado. Desafortunadamente, se supone que está medio roto en la versión anterior que probaron. Tal vez está arreglado ahora?
fuente
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.
fuente
Algunas otras alternativas pueden ser tagasistant , tagfs o dantalian .
fuente
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.
fuente
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.
fuente
TMSU
Sorprendido, nadie lo ha mencionado.
fuente
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:
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.
fuente