如何按标签搜索文件?

我可以使用nautilus标记文件,但到目前为止还没有找到按标签查找文件的解决方案。 Tracker-search-tool不提供搜索标签,也不提供Nautilus,也不提供我所知道的任何其他应用程序。 刚刚升级到11.04。

它叫做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 

真实世界我系统的例子

  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 

gnome-team ppa中的Nautilus有一个插件用于添加 – 删除标签,bun nof用于搜索。 当我向nautilus团队( 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 

所以我为此做了一个nautilus-python扩展。 安装python-nautilus并提交给跟踪器https://bugzilla.gnome.org/show_bug.cgi?id=670643

 sudo apt-get install python nautilus 

然后复制下一个代码并保存在.local / share / nautilus-python / extensions / [filename] .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+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.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

 nautilus -q 

当您右键单击任何文件或在后台使用新菜单项“Etiketa iragazkia”(标签filter中的巴斯克语)时。

使用tracker-tag从命令行搜索标签。 上述搜索语法在我的系统上不起作用(12.04)。 “-s”选项仅适用于“–list”:

 tracker-tag --list -s [tag] 

这是对第一个答案的评论,但我仍然缺少一些代表能够发表评论:-(