94 votes

Quelle est une bonne solution pour le marquage des fichiers sous linux ?

J'ai cherché un moyen d'étiqueter mes fichiers et de les rechercher/filtrer en fonction de ces étiquettes.

Voici mes ( actualisé ) exigences :

  • tout fichier lisible par l'utilisateur peut être étiqueté librement
  • un utilisateur peut rechercher des fichiers correspondant à un ou plusieurs tags
  • les fichiers peuvent être déplacés sans perdre les balises précédemment associées
  • le système peut être sauvegardé facilement
  • aucune dépendance à l'égard d'un environnement de bureau
  • si une interface graphique est impliquée, il doit y avoir une solution de repli pour le client.

J'ai espéré que le système de fichiers et les coreutils puissent gérer cela, mais je n'y ai pas encore assez réfléchi.
En attendant, je vais revoir beagle et metatracker, qui ont été mentionnés ici, et voir comment ils se comportent.


Ok, donc beagle a d'énormes dépendances gnome, et tracker est okish, mais a toujours quelques dépendances que je n'aime pas....

J'ai fait quelques recherches supplémentaires, et la solution pourrait très bien être la suivante attributs de fichiers étendus .
C'est une solution native pour la plupart des systèmes de fichiers récents, mais ils ne sont pas encore très bien supportés (la plupart des coreutils les détruisent par défaut, cp par exemple a besoin du flag -a pour les préserver). J'aimerais connaître votre avis sur leur utilisation pendant que je m'essaie moi-même à quelques bidouillages, bien que cela puisse justifier une nouvelle question.

33voto

Paul Ruane Points 683

Je viens de publier une version alpha de mon nouveau programme qui tente de fournir cette fonctionnalité. Il répond actuellement à certaines de vos exigences, mais pas à toutes. Il peut néanmoins vous intéresser. Il fournit un outil en ligne de commande pour le balisage et un système de fichiers virtuel pour la navigation (où les balises sont représentées par des répertoires).

http://www.tmsu.org/

tout fichier lisible par l'utilisateur peut être étiqueté librement

Oui.

un utilisateur peut rechercher des fichiers correspondant à un ou plusieurs tags

Oui. Soit via l'outil de ligne de commande, soit en parcourant les répertoires de balises dans le système de fichiers virtuel.

les fichiers peuvent être déplacés sans perdre les balises précédemment associées

Non. Cependant, l'application stocke les empreintes digitales des fichiers marqués qui sont utilisées pour aider à identifier les fichiers déplacés. Une commande "repair" est fournie pour mettre à jour les chemins des fichiers déplacés. (Évidemment, ce mécanisme tombe en panne si un fichier est à la fois déplacé et modifié).

le système peut être sauvegardé facilement

Oui. C'est un simple fichier de base de données Sqlite 3.

aucune dépendance à l'égard d'un environnement de bureau

Oui. Aucune dépendance et comme il peut être exécuté en tant que système de fichiers virtuel, il est disponible pour être utilisé comme système de fichiers dans n'importe quel programme qui supporte les liens symboliques.

si une interface graphique est impliquée, il doit y avoir une solution de repli pour le client.

Pas d'interface graphique pour le moment.

18voto

Charles Stewart Points 2782

Le type de recherche que vous voulez n'est pas clair. Si vous voulez que cela fonctionne n'importe où dans Unix, plutôt que seulement dans votre répertoire personnel, et que vous voulez seulement faire des recherches basées sur les noms de chemin, le schéma suivant est réalisable, avec un peu de bidouillage Shell, et en utilisant le standard locatedb :

  1. Chaque répertoire qui contient au moins un fichier étiqueté a besoin d'un sous-répertoire standard, par exemple .path-tags ;
  2. Chaque fichier du répertoire $FILE ayant un lien $TAG (qui ne doit pas contenir le char _ ) a un lien $TAG_$FILE -> ../$FILE

Je laisse les détails de la locate-tag script pour vous ; il devrait être de deux ou trois lignes, utilisant seulement le locate et Shell. (Si vous êtes intéressé, je pourrais en écrire un).

Certains membres de KDE ont parlé de ce type de schéma pour les métadonnées, mais je ne me souviens pas des détails.

Il devrait également être possible de faire des tests plus sophistiqués, examinant le contenu, basés sur ce schéma avec un script similaire enveloppé autour de find .

Réflexions sur les exigences actualisées

  1. tout fichier lisible par l'utilisateur peut être étiqueté librement - Oui, cela ne devrait pas poser de problème
  2. un utilisateur peut rechercher des fichiers correspondant à un ou plusieurs tags - De même
  3. les fichiers peuvent être déplacés sans perdre les balises qui leur étaient précédemment associées. - Les répertoires qu'ils occupent peuvent être déplacés librement, mais si le fichier est déplacé du répertoire, nous avons des problèmes. Si les balises prenaient la forme $TAG_$INODE_$FILE et nous avons un moyen efficace de trouver quels chemins ont un inode donné Nous pouvons alors le faire, en ne perdant les balises que si nous sortons des systèmes de fichiers. La copie de fichiers pourrait poser quelques problèmes, et c'est clairement plus compliqué que ma suggestion initiale.
  4. le système peut être sauvegardé facilement - pas essentiellement difficile.
  5. aucune dépendance à l'égard d'un environnement de bureau - aucun
  6. si une interface graphique est impliquée, il doit y avoir une solution de repli pour le client. - c'est là que nous vivons !

Post-scriptum Le fichier "reverse-inode-lookup" décrit par le lien (2) que vous m'avez montré dans votre réponse à (1) peut être utilisé pour fournir une infrastructure supplémentaire. Nous pouvons exécuter un service sur le fichier de recherche inverse, qui vérifie que chaque inode donné dans le nom de fichier d'une balise correspond à l'inode du fichier (s'il existe) vers lequel pointe la balise. S'il n'y a pas de correspondance, alors la chirurgie requise peut être effectuée (est-ce que l'inode existe toujours ? où est-il ?), et le fichier de consultation inverse est soit muté soit régénéré, et les liens symboliques des balises sont mis à jour.

Je prévois un cas délicat : que se passe-t-il si le fichier balisé n'est pas là où les balises indiquent qu'il devrait être, que le fichier de recherche inverse indique qu'il existe toujours, mais que le fichier prodigue n'est pas là où le fichier de recherche indique qu'il est, le fichier de recherche étant périmé ? Il y a plusieurs façons de traiter ce cas, aucune n'étant évidemment idéale. En dehors de cela, toute cette tâche semble être le genre de chose pour laquelle Perl est bien adapté...

9voto

alik Points 81

Personne ne l'a mentionné, mais vous devriez certainement regarder les attributs étendus des systèmes de fichiers. ext4 par exemple les a. Il existe des outils getfattr et setfattr pour les gérer. Bien sûr, vous devrez écrire quelques Shell Shell pour rechercher les fichiers étiquetés avec un certain tag. En ce qui concerne les questions mentionnées, toutes les réponses sont "Oui". Vous devez seulement prendre en compte le fait que cela dépend du système de fichiers.

7voto

Dan Dascalescu Points 3650

Je suis surpris que personne n'ait mentionné Espaces TagSpaces . Il répond à toutes vos exigences car les balises sont stockées dans le nom du fichier et TagSpaces est multiplateforme.

TagSpaces

6voto

jfar Points 19380

Je pense que ce puede répondre à toutes vos exigences. Dans tous les cas, il s'agit d'un morceau de code sympa :

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

L'interface graphique nécessite Qt, mais il y a une application en ligne de commande pour la recherche et le fait que toutes les balises sont en fait dans le nom du fichier rend trivial la manipulation des balises|fichiers à partir du client.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X