Как искать файлы по тегам?

Я могу пометить файлы с помощью nautilus, но пока не нашел решения для поиска файлов по тэгам. Tracker-search-tool не предлагает для поиска тегов, как и Nautilus, и любое другое приложение, о котором я знаю. Только что обновлен до 11.04.

13
задан 6 May 2011 в 03:08

3 ответа

Поиск тегов из командной строки с тегом средства отслеживания. Вышеупомянутый поисковый синтаксис не работает над моей системой (12.04). "-s" опция только доступна с "-список":

tracker-tag --list -s [tag]

Это - скорее комментарий к первому ответу, но я все еще испытываю недостаток в некоторых представителях, чтобы смочь прокомментировать :-(

2
ответ дан 6 May 2011 в 03:08

Наутилус в команде гнома ppa имеет плагин для, добавляют - удаляют теги, булочка nof для поиска. Когда я попросил новое представление панели команде наутилуса (https://bugzilla.gnome.org/show_bug.cgi? id=670163), получил этот ответ.

- 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

Таким образом, я сделал расширение Python наутилуса только для этого. Наутилус Python установки и отправленный средству отслеживания https://bugzilla.gnome.org/show_bug.cgi? id=670643

sudo apt-get install python nautilus

Затем скопируйте следующий код и сохраните под .local/share/nautilus-python/extensions / [имя файла] .py

#natxooy@gmail.com
#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]

И наконец наутилус перезапуска

nautilus -q

Когда Вы исправляете-clic любой файл, или в фоновом режиме новый пункт меню 'Etiketa iragazkia' (тег просачиваются баскский язык).

2
ответ дан 6 May 2011 в 03:08

Это называется tracker-tag:

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

Он предоставляется пакетом tracker-utils, который является версией командной строки средства отслеживания.

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

Пример

Чтобы добавить тег:

tracker-tag -a TAG file

Для поиска по тегу:

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

Примеры из реального мира из моей системы

<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
0
ответ дан 6 May 2011 в 03:08

Другие вопросы по тегам:

Похожие вопросы: