Quelle est la bonne solution pour le marquage de fichiers sous Linux? [fermé]

71

Je cherchais un moyen de baliser mes fichiers et de les rechercher / les filtrer en fonction de ces balises.

Voici mes exigences ( mises à jour ):

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

J'espérais disposer d'un système de fichiers de base et d'un hackery coreutils pour gérer cela, mais je n'y avais pas encore pensé assez.
En attendant, je vais passer en revue beagle et metatracker, qui ont été mentionnés ici, et voir comment ils se comportent.


Ok, Beagle a d’énormes dépendances de gnome, et tracker est correct, mais a encore des dépendances que je n’aime pas ...

Nous avons effectué des recherches plus poussées et la voie à suivre pourrait très bien consister en des attributs de fichier étendus .
C'est une solution native pour les systèmes de fichiers les plus 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 de l'indicateur -a pour les préserver). J'aimerais entendre des réflexions sur leur utilisation pendant que je m'essaie à quelques piratages moi-même, même si cela pourrait justifier une nouvelle question.

Julien
la source
2
Problèmes liés aux attributs de fichier étendus: (i) D'après mon expérience, ils constituent une nuisance lorsque vous souhaitez effectuer une sauvegarde. (ii) Vous ne pouvez pas les utiliser lorsque vous vous déplacez entre des systèmes de fichiers. En dehors de cela, ils seraient la bonne chose.
Charles Stewart
PytagsFS superuser.com/a/89140/129520
n611x007
Dans les forums PC-BSD, en référence à l'édition 2010 de cette question: PC-BSD, attributs étendus et marquage; L'approche d'OpenMeta et Apple
Graham Perrin

Réponses:

13

Il n'est pas clair quel type de recherche que vous voulez. Si vous voulez que cela fonctionne n'importe où dans Unix, plutôt que juste dans votre répertoire personnel, et que vous voulez seulement faire des recherches basées sur les noms de chemins, le schéma suivant est réalisable, avec un peu de piratage de shell et en utilisant la norme locatedb:

  1. Chaque répertoire contenant au moins un fichier étiqueté nécessite un sous-répertoire standard, par exemple .path-tags;
  2. Chaque fichier du répertoire $ FILE avec le lien $ TAG (qui ne doit pas contenir le caractère _) a un lien$TAG_$FILE -> ../$FILE

Je vous laisse les détails du locate-tagscript; il devrait s'agir de deux ou trois locatelignes , n'utilisant que la commande et le hackery shell. (Si cela vous intéresse, je pourrais en écrire un).

Certains des responsables de KDE ont parlé de ce type de schéma pour les métadonnées, bien que je ne me souvienne pas des détails.

Il devrait également être possible de réaliser des tests d’examen du contenu plus sophistiqués basés sur ce schéma, avec un script similaire encapsulé find.

Réflexions sur les exigences mises à jour

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

Postscript 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 inversée, qui vérifie que chaque inode indiqué dans le nom de fichier d'une balise correspond à l'inode du fichier (le cas échéant) pointé par la balise. S'il n'y a pas de correspondance, alors l'opération requise peut être effectuée (l'inode existe-t-il toujours? Où est-il?), Le fichier de recherche inversée étant muté ou régénéré, et les liens symboliques de balises étant mis à jour.

J'anticipe un cas délicat: que se passe-t-il si le fichier balisé n'est pas où les balises disent qu'il devrait être, le fichier de recherche inversée dit qu'il existe toujours, mais le fichier prodigue n'est pas où le fichier de recherche indique qu'il est, le fichier de recherche étant hors de Date? Il existe plusieurs façons de traiter cette affaire, aucune n’est manifestement idéale. En dehors de cela, toute cette tâche semble être le genre de chose à laquelle Perl est bien adapté ...

Charles Stewart
la source
1
C'est bien, et j'ai aussi pensé à utiliser des liens symboliques. Le problème est qu’un fichier ne peut pas être déplacé sans perdre ses balises. Idéalement, les balises seraient agnostiques sur le chemin, et la recherche d'une balise devrait renvoyer le fichier réel, plutôt qu'un lien symbolique mort ... PS: je suis tout pour une solution basée sur un shell, mais je pense que le domaine du problème fait en sorte qu'il Il serait très pénible de ne conserver que des scripts shell, j'espère que quelqu'un me prouvera le contraire
julien
J'ai modifié ma question pour (espérons-le) préciser le type de solution que je recherche. à la vôtre
julien
Zut je n'avais jamais réalisé que les inodes étaient comme des guides persistants pour les fichiers, c'est matière à réflexion!
Julien
1
les inodes sont des uids, mais ils sont liés à un fs donné, ils ne sont donc pas des guids. Ce n'est pas une mauvaise chose, car copier, sauvegarder, archiver, etc. signifie que les fichiers sont dupliqués et stockés dans d'autres fichiers et que vous voulez que l'état fs vous fournisse suffisamment d'informations pour démêler les résultats.
Charles Stewart
1
J'ai raté le punchline, quel logiciel peut gérer cela? J'espérais quelque chose que je pourrais utiliser avec désinvolture sans écrire ma propre infrastructure. (Mais clair pour que je puisse l'
étendre
22

Je viens de publier un alpha de mon nouveau programme qui tente de fournir cette fonctionnalité. Il répond actuellement à certaines de vos exigences, mais pas à toutes. Cela pourrait vous intéresser de toute façon. Il fournit un outil de ligne de commande pour le marquage et un système de fichiers virtuel pour la navigation (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 à une ou plusieurs balises

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 tags précédemment associés

Non. Cependant, l’application stocke les empreintes digitales des fichiers marqués, qui sont utilisées pour identifier les fichiers déplacés. Une commande 'réparation' est fournie pour mettre à jour les chemins des fichiers déplacés. (Évidemment, ce mécanisme échoue 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 sur aucun 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é en tant que système de fichiers dans tout programme prenant en charge les liens symboliques.

si une interface graphique est impliquée, il doit y avoir une solution de secours cli

Pas d'interface graphique à l'heure actuelle.

Paul Ruane
la source
Semble très intéressant. Avez-vous une idée de la manière de mettre en œuvre la possibilité de déplacer des fichiers sans perdre les balises associées?
étudiant
@student: il existe actuellement une commande 'repair' qui traite les fichiers déplacés et modifiés. (Cependant, si vous déplacez et modifiez un fichier, celui-ci ne sera pas détecté.)
Paul Ruane
Peut-être que l'on pourrait écrire des variantes de mv, cpet rmqui traitent aussi vos balises (appelez-les par exemple tmv, tcpet trm) alors on ne perdrait pas les balises au moins si on utilise la ligne de commande pour déplacer des fichiers ...
étudiant du
@student TMSU comprend maintenant quelques scripts qui effectuent des opérations de système de fichiers tout en conservant la base de données à jour: tmsu-fs-mv, tmsu-fs-rmet tmsu-fs-merge.
Paul Ruane
Excusez ma question, mais ... ¿pourquoi ne pas simplement cloner des balises lors du déplacement automatique d’un fichier? Dois-je mettre à jour manuellement les fichiers lors du déplacement?
erm3nda
6

Je pense que cela pourrait répondre à toutes vos exigences. En tout cas, c'est un morceau de code sympa:

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

L’interface graphique nécessite Qt, mais il existe une application de ligne de commande pour la recherche et le fait que toutes les balises soient réellement dans le nom du fichier facilite la manipulation des balises | fichiers de la cli.

laramichaels
la source
1
À partir de la page: "Les informations sur les balises sont stockées dans le nom du fichier" - à quoi ressemblent les noms de fichiers marqués? BTW, les liens sur cette page sont très intéressants: +1.
Charles Stewart
rapport-pour-facture [travail, heures, produit par moi] .odt
laramichaels
@ Laramichaels Je sais que c'est assez vieux, mais j'ai trouvé l'approche très intéressée. Si ce n'était pas pour le manque de documentation (nulle part il n'est expliqué comment fonctionne le nommage des fichiers), je l'adopterais. Si vous avez des nouvelles sur de tels outils, s'il vous plaît faites le moi savoir,
TomCho
6

Personne n'a mentionné, mais vous devriez absolument regarder les attributs de système de fichiers étendus. ext4 par exemple les a. Il existe des outils getfattr et setfattr pour les gérer. Bien sûr, vous devrez écrire des scripts shell pour rechercher les fichiers marqués avec sometag. En ce qui concerne les questions mentionnées, toutes les réponses sont "Oui". Vous devez seulement prendre en compte que cela dépend du système de fichiers.

Alik
la source
Les données Inode du fichier devraient être définitivement la manière correcte de le faire sur un fichier ext4, mais n'offrent aucune compatibilité en amont. Droite?
erm3nda
6

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

TagSpaces

Dan Dascalescu
la source
1
tagspaces n'a pas de solution de secours CLI, il ne répond donc pas à toutes les exigences. Ou a-t-il une CLI? Si c'est le cas, faites-le moi savoir!
TomCho
L'application n'est pas prise en charge dans Debian 9 apt. Quelque chose arrive? - - Vous pouvez installer l'application à l'aide de ces instructions tagspaces.org/products
Léo Léopold Hertz 준영
Pouvez-vous s'il vous plaît comparer votre proposition aux outils de recherche de bureau Linux?
Léo Léopold Hertz 준영
5

Vous n'avez probablement pas besoin d'installer le bureau KDE complet pour leur bibliothèque de marquage, Nepomuk. Vous devrez toujours installer les bibliothèques de base KDE, cependant ...


la source
1
Ouais, j'espérais trouver une alternative à cela, mais ça n'a pas l'air si ...
julien
2

Cet article récent sur les outils de recherche de bureau de Linux mentionne que Tracker prend en charge le marquage. Malheureusement, il est supposé être à moitié cassé dans l'ancienne version testée. Peut-être que c'est corrigé maintenant?

  1. Pas à l'échelle du système.
  2. Vous pouvez le sauvegarder.
  3. Il est livré avec Gnome.
Iain
la source
2

Essayez Beagle . Je trouve que c'est très bien.

Il se peut que cela ne réponde pas à toutes les exigences et je ne sais pas ce qui pourrait. Par exemple, les fichiers FIFO prennent-ils en charge les attributs étendus? S'ils ne le font pas, Beagle a une base de données de secours.

pcapademic
la source
Beagle peut-il gérer des fichiers non réguliers?
Charles Stewart
@ Charles Stewart - vous voulez dire des fichiers non-texte?
pcapademic
Non, je parle des fichiers de périphérique, des liens symboliques, des FIFO, etc.
Charles Stewart
Ce lien ne fait pas référence à un projet sur l'organisation du document.
Détly
1

Donc, vous ne trouverez pas d’intégration Nepomuk dans gnome, en ligne de commande ou ailleurs dans Linux.

Inversement, avec Tracker, vous ne trouverez pas d’intégration kde autant que je sache. Pas sûr sur CLI.

Donc, malheureusement, la réponse semble être "non".

Encore plus malheureusement, cela ne signifie pas qu'il y ait une bonne opportunité pour en construire une non plus. Les utilitaires de ligne de commande Linux n'ont pas beaucoup de points communs avec le gestionnaire de fichiers GUI, par exemple, il n'y a donc aucun composant commun qui pourrait être étendu pour prendre en charge le concept.

pbr
la source
0

J'ai créé un petit programme qui utilise SQLite à cette fin. Cela a résolu mon besoin, mais peut-être que ça vous aide aussi:

https://github.com/alvatar/dfym

Le seul problème de cette approche est qu’il ne se synchronise pas avec les déplacements et les suppressions, mais résout le problème pour les fichiers relativement statiques.

alvatar
la source
0

TMSU

TMSU est un outil pour marquer vos fichiers. Il fournit un simple utilitaire de ligne de commande pour l’application de balises et un système de fichiers virtuel pour vous donner une vue de vos fichiers à partir de balises à partir de tout autre programme.

TMSU ne modifie en aucune manière vos fichiers: ils restent inchangés sur le disque ou sur le réseau, où que vous soyez. TMSU maintient sa propre base de données et vous obtenez simplement une vue supplémentaire, que vous pouvez monter où bon vous semble, en fonction des balises que vous avez configurées.

Surpris, personne n'en a parlé.

justsomeguy
la source
1
vous l'avez manqué ... c'est la réponse la plus votée
pufferfish
-1

Je suggère de jeter un coup d'œil à un système de contrôle de version tel que Subversion pour ce type de fonctionnalités au-delà du système de fichiers. Certains peuvent vous convenir mieux que d'autres, mais généralement:

  • Beaucoup supportent le tagging (certainement la subversion).
  • Beaucoup sont multi-plateformes; Windows, Mac, Linux, à peu près tous les Unix.
  • Beaucoup ont à la fois une interface graphique et des clients en ligne de commande.
  • Beaucoup ont déjà des liens pour votre langage de programmation / script préféré.
  • Beaucoup sont facilement sauvegardés.
  • Beaucoup sont conçus pour être très facilement partageables d'une manière ou d'une autre.
  • Beaucoup vous permettent de contrôler l'accès.
  • Vous n'avez pas à réinventer la roue.
    • Vous apprenez et utilisez des commandes / outils standard déjà utilisés par des millions de personnes.
  • Vous pouvez l'installer aujourd'hui pour votre dépôt favori de votre système d'exploitation. apt-get install, yum install
  • Vous bénéficiez également de la gestion des versions "gratuitement".

Un exemple cli avec 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

Je ne recommanderais pas ces outils pour les fichiers binaires volumineux changeant régulièrement (de la taille en gigaoctets), mais pour tout le reste, ils sont déjà bien éprouvés et s'adaptent à de très grandes tailles.

Colin
la source