Comment rechercher des fichiers par tags?

Je peux baliser des fichiers avec Nautilus, mais je n’ai pas trouvé de solution pour rechercher des fichiers par balises. Tracker-search-tool ne propose pas de recherche de balises, pas plus que Nautilus, ni aucune autre application à ma connaissance. Vient de passer à 11.04.

C’est ce qu’on appelle tracker-tag:

http://manpages.ubuntu.com/manpages/natty/man1/tracker-tag.1.html

Il est fourni par le paquet tracker-utils, qui est la version en ligne de commande de la fonction de suivi.

-s -- lists all files associated with a tag -a -- Add a tag to a file 

Exemple

Pour append un tag:

 tracker-tag -a TAG file 

Pour rechercher par étiquette:

 tracker-tag -s TAG Result: 1 /home/sean/file 

Exemples concrets de mon système

  tracker-tag -a TAG exten  tracker-tag -a testing atreides master.ldif php_error.log TrainingUpdates.otl  tracker-tag -s testing Results: 5 /home/sean/TrainingUpdates.otl /home/sean/atreides /home/sean/exten /home/sean/master.ldif /home/sean/php_error.log  tracker-tag -a myTagExample TrainingUpdates.otl atreides exten master.ldif php_error.log  tracker-tag -s myTagExample Results: 5 /home/sean/TrainingUpdates.otl /home/sean/atreides /home/sean/exten /home/sean/master.ldif /home/sean/php_error.log  tracker-tag -s TAG Result: 1 /home/sean/exten 

Nautilus dans gnome-team ppa a un plugin pour les balises add-remove et bun nof pour la recherche. Lorsque j’ai demandé une nouvelle vue du panel à l’équipe de Nautilus ( https://bugzilla.gnome.org/show_bug.cgi?id=670163 ), j’ai obtenu cette réponse.

 - the interface that allows to add tracker tags from Nautilus is not part of Nautilus, but it's an extension - we will not add any additional side pane, since we intentionally sortingmmed them down to Places and Tree for Nautilus 3.0 - I think the best way to do what you want is from Tracker itself; if the UI utilities shipped with Tracker don't allow you to do this, you should file a bug against Tracker for it 

J’ai donc créé une extension Nautile-Python rien que pour ça. Installez python-nautilus et soumettez-le au tracker https://bugzilla.gnome.org/show_bug.cgi?id=670643

 sudo apt-get install python nautilus 

Puis copiez le code suivant et enregistrez-le sous .local / share / nautilus-python / extensions / [nom du fichier] .py

 #[email protected] #nautilus etiketa bilatzaile #v 0.1 from gi.repository import Nautilus, GObject from gi.repository import Gtk as gtk from gi.repository.GdkPixbuf import Pixbuf from subprocess import Popen, PIPE, STDOUT,call from os import path,environ from sys import platform from urllib import unquote from mimetypes import guess_type import locale class TagsManager: def __init__(self): self.d={} self.dtag={} cmd='tracker-tag -t' p=Popen(cmd,shell=True,stdin=PIPE, stdout=PIPE, stderr=STDOUT,close_fds=True) output = p.stdout.read() l=output.split('\n') while('' in l): l.remove('') if len(l)>3: for i in range(2,len(l),3): if i+20: cmd='tracker-tag -t -s' p=Popen(cmd,shell=True,stdin=PIPE, stdout=PIPE, stderr=STDOUT,close_fds=True) output = p.stdout.read() l=output.split('\n') ll= [unquote(i.ssortingp()).decode('utf-8') for i in l] ini=ll.index(tag) lkini=lk.index(unicode(tag)) if tag==lk[-1]: resp=ll[ini+1:] while('' in resp): resp.remove('') else: fin=ll.index(lk[lkini+1]) resp=[ll[i] for i in range(ini+1,fin)] self.dtag[tag]=resp class Ventana: def clic(self, widget, event, data=None): l=[] lista_nueva=[] for i in self.todas.get_selection().get_selected_rows()[1]: t= self.todas.get_model().get_value(self.todas.get_model().get_iter(i), 0) l.append(t) if len(l)==1: lista_nueva=[i for i in self.tm.dtag[l[0]]] elif len(l)>1: lista_nueva=[i for i in self.tm.dtag[l[0]]] for i in l[1:]: ll=[] for f in self.tm.dtag[i]: if f in lista_nueva: ll.append(f) lista_nueva=[f for f in ll] else:lista_nueva=[] self.files.get_model().clear() lista=[f.encode('utf-8')[7:] for f in lista_nueva] lf=[i for i in lista if path.isfile(i)] ld=[i for i in lista if not path.isfile(i)] lista_nueva=ld+lf for f in lista_nueva: mime_type= guess_type(path.basename(f)) if mime_type[0]<>None: icon= 'gnome-mime-'+mime_type[0].replace('/','-') else: print f.encode('utf-8'),path.isfile(f) if path.isfile(f):icon='gtk-file' else:icon='folder' pixbuf = gtk.IconTheme.get_default().load_icon(icon, 48, 0) self.files.get_model().append([pixbuf,path.basename(f),f]) return False def open_file(self, iconview, ipath): model = iconview.get_model() iter = model.get_iter(ipath) filename = model.get_value(iter, 2) if platform == 'linux2': call(["xdg-open", filename]) return def __init__(self): self.tm=TagsManager() self.paned = gtk.HPaned() self.existentags = gtk.ListStore(str) tags=[i for i in self.tm.d.keys()] tags.sort() for t in tags: self.existentags.append([t]) self.todas = gtk.TreeView(self.existentags) self.todas.get_selection().set_mode(gtk.SelectionMode.MULTIPLE) cell = gtk.CellRendererText() self.todas.connect("button_release_event", self.clic, None) column0=gtk.TreeViewColumn("Tags",cell, text=0) self.todas.append_column(column0) scrolled_window = gtk.ScrolledWindow() scrolled_window.set_policy(gtk.PolicyType.AUTOMATIC, gtk.PolicyType.AUTOMATIC) scrolled_window.add_with_viewport (self.todas) self.paned.add1(scrolled_window) self.listfiles = gtk.ListStore(Pixbuf,str,str) self.files = gtk.IconView.new() self.files.set_model(self.listfiles) self.files.set_pixbuf_column(0) self.files.set_text_column(1) self.files.connect('item-activated', self.open_file) scrolled_window2 = gtk.ScrolledWindow() scrolled_window2.set_policy(gtk.PolicyType.AUTOMATIC, gtk.PolicyType.AUTOMATIC) scrolled_window2.add_with_viewport (self.files) self.paned.add2(scrolled_window2) self.paned.set_position(150) self.paned.show_all() class PApplication(gtk.Application): def __init__(self,window): self.dialog = gtk.Dialog ("Etiketa iragazkia", window, gtk.DialogFlags.MODAL, (gtk.STOCK_CLOSE, gtk.ResponseType.CLOSE,)) self.dialog.set_icon_name (gtk.STOCK_EDIT) self.dialog.set_size_request(600, 400) TS=Ventana() self.dialog.vbox.pack_start (TS.paned,expand=True, fill=True, padding=0) class Pr(GObject.GObject, Nautilus.MenuProvider): def __init__(self): pass def ojo(self,menu,window): d=PApplication(window) r=d.dialog.run() d.dialog.destroy() return def get_background_items(self, window, files): return self.menuItem(window) def get_file_items(self, window, files): return self.menuItem(window) def menuItem(self, window): self.window=window P = Nautilus.MenuItem( name="Etiketa iragazkia::Etiketa iragazkia", label="Etiketa iragazkia", tip="Etiketa iragazkia" ) P.connect('activate', self.ojo, window) return [P] 

Et enfin redémarrer Nautilus

 nautilus -q 

Lorsque vous cliquez n’importe quel fichier ou en arrière-plan avec le bouton droit de la souris, un nouvel élément de menu ‘Etiketa iragazkia’ (filtre de balise en basque).

Recherchez les tags à partir de la ligne de commande avec tracker-tag. La syntaxe de recherche susmentionnée ne fonctionne pas sur mon système (12.04). L’option “-s” est uniquement disponible avec “–list”:

 tracker-tag --list -s [tag] 

Ceci est plutôt un commentaire sur la première réponse mais il me manque encore quelques représentants pour pouvoir commenter 🙁