Nautilusでファイルにタグを付けることはできますが、これまでにタグでファイルを見つけるための解決策が見つかりませんでした。 Tracker-search-toolは、タグの検索を提供しません。Nautilusも、私が知っている他のアプリケーションも検索しません。 11.04にアップグレードしました。
トラッカータグと呼ばれます。
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
Tracker-tagを使用して、コマンドラインからタグを検索します。上記の検索構文は、私のシステム(12.04)では機能しません。 「-s」オプションは、「-list」でのみ使用可能です。
tracker-tag --list -s [tag]
これは最初の回答に対するコメントですが、コメントできる担当者がまだいません:-(
Gnome-team ppaのNautilusには、add-removeタグ用のプラグイン、検索用のbun nofがあります。 nautilusチームに新しいパネルビューを要求したとき( https://bugzilla.gnome.org/show_bug.cgi?id=67016 )この答えを得ました。
- 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=67064
Sudo apt-get install python nautilus
次に、次のコードをコピーして、.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]
そして最後にnautilusを再起動します
nautilus -q
ファイルまたはバックグラウンドで新しいメニュー項目「Etiketa iragazkia」(バスク語のタグフィルター)を右クリックすると。