วิธีค้นหาไฟล์ด้วยแท็ก?


13

ฉันสามารถแท็กไฟล์ด้วย nautilus แต่ยังไม่พบวิธีแก้ปัญหาในการค้นหาไฟล์ด้วยแท็กจนถึงตอนนี้ เครื่องมือติดตามตัวค้นหาไม่ได้เสนอให้ค้นหาแท็กไม่มี Nautilus หรือแอปพลิเคชันอื่น ๆ ที่ฉันทราบ เพิ่งอัพเกรดเป็น 11.04


ฉันแน่ใจว่ามีสิ่งอำนวยความสะดวกในตัวติดตามเพื่อค้นหาด้วยแท็ก แต่อาจมีการเชื่อมโยงกับ nepomuk ซึ่งฉันเคยมีกับ kubuntu
andybleaden

คำตอบ:


6

มันชื่อว่า 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

ไม่ถูกต้อง - ใช้ร่วมกับตัวเลือก -t ซึ่งจะแสดงแท็ก ALLO และไฟล์ทั้งหมดที่เกี่ยวข้อง
user16676

อืม ... ดูเหมือนว่าจะทำงานได้ดีในระบบของฉัน
ฌอนเลวิส

2

Nautilus ใน gnome-team ppa มีปลั๊กอินสำหรับเพิ่ม - เอาแท็กออกไปเพื่อค้นหา เมื่อฉันขอมุมมองพาเนลใหม่ให้กับทีม 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+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

เมื่อคุณคลิกขวาที่ไฟล์ใด ๆ หรือในพื้นหลังรายการเมนูใหม่ 'Etiketa iragazkia' (ตัวกรองแท็กในบาสก์)


2

ค้นหาแท็กจากบรรทัดคำสั่งด้วย tracker-tag ไวยากรณ์การค้นหาที่กล่าวถึงข้างต้นไม่ทำงานในระบบของฉัน (12.04) ตัวเลือก "-s" ใช้ได้เฉพาะกับ "- รายการ":

tracker-tag --list -s [tag]

นี่เป็นคำวิจารณ์ในคำตอบแรก แต่ฉันยังขาดตัวแทนที่จะแสดงความคิดเห็น :-(

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.