Como procurar arquivos por tags?

13

Posso marcar arquivos com o nautilus, mas ainda não encontrei uma solução para encontrar arquivos por tags. A ferramenta Tracker-search-tool não oferece busca por tags, nem o Nautilus, nem qualquer outro aplicativo que eu conheça. Apenas atualizado para 11.04.

user16676
fonte
Eu tinha certeza de que havia uma facilidade no rastreador para pesquisar por tags, mas que podem ter sido ligada a nepomuk que eu costumava ter com kubuntu
andybleaden

Respostas:

6

Chama-se tracker-tag:

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

É fornecido pelo pacote tracker-utils, que é a versão da linha de comandos do recurso tracker.

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

Exemplo

Para adicionar uma tag:

tracker-tag -a TAG file

Para pesquisar por tag:

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

Exemplos do mundo real do meu sistema

<sean@mymachine:~> tracker-tag -a TAG exten
<sean@mymachine:~> tracker-tag -a testing atreides master.ldif php_error.log TrainingUpdates.otl

<sean@mymachine:~> 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

<sean@mymachine:~> tracker-tag -a myTagExample TrainingUpdates.otl atreides exten master.ldif php_error.log 
<sean@mymachine:~> 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

<sean@mymachine:~> tracker-tag -s TAG
Result: 1
  /home/sean/exten
Sean Lewis
fonte
Isso não está correto - em conjunto com a opção -t, ele lista as tags ALLO e todos os arquivos associados a elas.
User16676
Hmmm ... Parece funcionar muito bem no meu sistema.
Sean Lewis
2

O Nautilus no gnome-team ppa possui um plug-in para adicionar / remover tags, e não para pesquisar. Quando solicitei uma nova exibição em painel para a equipe do nautilus ( https://bugzilla.gnome.org/show_bug.cgi?id=670163 ) recebi esta resposta.

- 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 trimmed 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

Então, eu fiz uma extensão nautilus-python apenas para isso. Instale o python-nautilus e envie para o rastreador https://bugzilla.gnome.org/show_bug.cgi?id=670643

sudo apt-get install python nautilus

Em seguida, copie o próximo código e salve em .local / share / nautilus-python / extensions / [filename] .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+2<len(l):self.d[l[i].strip()]=int(l[i+2][:l[i+2].find('f')])
            original_list=[i for i in self.d.keys()]
        #lk.sort()
        decorated = [(s.lower(), s) for s in original_list]
        decorated.sort()
        lk = [s[1] for s in decorated]
        print lk
        for tag in lk:
            if self.d[tag]<>0:
                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.strip()).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]

E, finalmente, reinicie o nautilus

nautilus -q

Quando você clica com o botão direito em qualquer arquivo ou em segundo plano, um novo item de menu 'Etiketa iragazkia' (filtro de tags em basco).

Natxo
fonte
2

Procure por tags na linha de comando com tracker-tag. A sintaxe de pesquisa acima mencionada não funciona no meu sistema (12.04). A opção "-s" está disponível apenas com "--list":

tracker-tag --list -s [tag]

Este é um comentário sobre a primeira resposta, mas ainda não tenho alguns representantes para poder comentar :-(

Mrmfldmn
fonte