ฉันจะติดแท็กไฟล์และค้นหาในภายหลังโดยใช้แท็กได้อย่างไร


15

ใช้งาน Ubuntu Gnome

ฉันมี PDF และเอกสารอื่น ๆ มากมายและฉันจะติดแท็กพวกเขา และค้นหาในภายหลังตามแท็กเหล่านี้ แม้ว่าฉันจะย้ายไฟล์ไปยังโฟลเดอร์อื่น (ดังนั้นแท็กก็จะติดอยู่กับไฟล์)

ฉันค้นหา แต่ไฟล์และเอกสารไม่มีตัวเลือกนี้

ฉันกำลังทำอะไรผิดหรือเปล่า? ฉันจะติดแท็กไฟล์เพื่อให้สามารถค้นหาได้ตามแท็กในภายหลังได้อย่างไร


เพียงแท็กการเพิ่มเอกสาร PDF เป็นส่วนหนึ่งของคำถาม ( แต่ไม่ได้เป็นส่วนแท็กการค้นหาของคำถาม) ดูคำตอบนี้
คาเรล

คุณจะพิจารณา "คั่นหน้า" ไฟล์เป็นตัวเลือกแทนที่จะติดแท็กหรือไม่
Sergiy Kolodyazhnyy

@ เซอร์ฉันไม่ชัดเจน คุณช่วยอธิบายหน่อยได้ไหม? ที่คั่นหน้าเหล่านี้มีแท็กเช่นที่คั่นหน้าของ Firefox หรือไม่ พวกเขาจะยังคงอยู่หรือไม่แม้ว่าฉันจะย้ายไฟล์
deshmukh

@deshmukh นี่คือสิ่งที่ฉันเคยทำมาก่อน: askubuntu.com/q/803644/295286 โดยทั่วไปแล้วมันจะสร้าง symlink ไปยังไฟล์ภายในโฟลเดอร์ ในทางกลับกันฉันสามารถใช้รายการเรียงแท็กและสำหรับแต่ละแท็กจะมีรายการไฟล์ ขณะนี้ฉันค่อนข้างยุ่งดังนั้นฉันต้องตอบกลับตลอดไป แต่ฉันจะพยายามตอบคำถามโดยเร็วที่สุด เป็นไปได้ไหมที่จะนำเงินรางวัลอีกครั้งหนึ่งครั้งนี้จะหมดไป?
Sergiy Kolodyazhnyy

@Serg ฉันไม่รวยพอที่จะเสนอรางวัลอื่น :) แต่ถ้าคนนี้ไปโดยไม่มีใครชนะ (เป็นไปได้หรือไม่) และถ้าคำตอบของคุณ (เมื่อมันมาถึง) ดีที่สุดแน่นอนฉันจะมอบรางวัลให้ คุณ :) :)
deshmukh

คำตอบ:


9

สารบัญ:

  1. บทนำ
  2. การติดตั้ง
  3. การใช้
  4. รหัสแหล่งที่มา

1. บทนำ

วิธีการแก้ปัญหานี้ประกอบด้วยสองสคริปต์ - หนึ่งสำหรับการแท็กหนึ่งสำหรับการอ่านรายการของไฟล์ภายใต้แท็กเฉพาะ ทั้งคู่ต้องอยู่ต่อ~/.local/share/nautilus/scriptsและเปิดใช้งานด้วยการคลิกขวาในตัวจัดการไฟล์ Nautilus ในไฟล์ใดก็ได้และไปที่เมนูย่อย Scripts ซอร์สโค้ดสำหรับแต่ละสคริปต์มีให้ที่นี่เช่นเดียวกับในGitHub

2. การติดตั้ง

ต้องบันทึกสคริปต์ทั้งสองไว้~/.local/share/nautilus/scriptsที่ซึ่ง~เป็นโฮมไดเร็กตอรี่ของผู้ใช้และทำให้สามารถเรียกใช้งานchmod +x filenameได้ สำหรับการติดตั้งง่ายใช้สคริปต์ทุบตีต่อไปนี้:

#!/bin/bash

N_SCRIPTS="$HOME/.local/share/nautilus/scripts"
cd /tmp
rm master.zip*
rm -rf nautilus_scripts-master
wget https://github.com/SergKolo/nautilus_scripts/archive/master.zip
unzip master.zip
install nautilus_scripts-master/tag_file.py "$N_SCRIPTS/tag_file.py"
install nautilus_scripts-master/read_tags.py "$N_SCRIPTS/read_tags.py"

3. การใช้งาน:

การติดแท็กไฟล์ :

เลือกไฟล์ในตัวจัดการไฟล์ Nautilus คลิกขวาที่ไฟล์เหล่านั้นและไปที่เมนูย่อยของสคริปต์ tag_file.pyเลือก กดEnter ป้อนคำอธิบายรูปภาพที่นี่ ครั้งแรกที่คุณเรียกใช้สคริปต์นี้จะไม่มีไฟล์กำหนดค่าดังนั้นคุณจะเห็นสิ่งนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ครั้งต่อไปเมื่อคุณมีแท็กไฟล์อยู่แล้วคุณจะเห็นป๊อปอัปที่ให้คุณเลือกแท็กและ / หรือเพิ่มใหม่ (วิธีนี้คุณสามารถบันทึกไฟล์ภายใต้หลายแท็ก) กดOKเพื่อเพิ่มไฟล์ลงในแท็กนี้ หมายเหตุ : หลีกเลี่ยงการมี "|" สัญลักษณ์ในชื่อแท็ก

ป้อนคำอธิบายรูปภาพที่นี่

~/.tagged_filesบันทึกสคริปต์ทุกอย่างใน ไฟล์นั้นเป็นjsonพจนานุกรม (ซึ่งไม่ใช่สิ่งที่ผู้ใช้ทั่วไปควรใส่ใจ แต่สะดวกสำหรับโปรแกรมเมอร์ :)) รูปแบบของไฟล์นั้นเป็นดังนี้:

{
    "Important Screenshots": [
        "/home/xieerqi/\u56fe\u7247/Screenshot from 2016-10-01 09-15-46.png",
        "/home/xieerqi/\u56fe\u7247/Screenshot from 2016-09-30 18-47-12.png",
        "/home/xieerqi/\u56fe\u7247/Screenshot from 2016-09-30 18-46-46.png",
        "/home/xieerqi/\u56fe\u7247/Screenshot from 2016-09-30 17-35-32.png"
    ],
    "Translation Docs": [
        "/home/xieerqi/Downloads/908173 - \u7ffb\u8bd1.doc",
        "/home/xieerqi/Downloads/911683\u7ffb\u8bd1.docx",
        "/home/xieerqi/Downloads/914549 -\u7ffb\u8bd1.txt"
    ]
}

หากคุณต้องการ "untag" ไฟล์บางไฟล์เพียงแค่ลบรายการจากรายการนั้น คำนึงถึงรูปแบบและเครื่องหมายจุลภาค

ค้นหาด้วยแท็ก :

ตอนนี้คุณมี~/.tagged_filesฐานข้อมูลที่ดีของไฟล์คุณสามารถอ่านไฟล์นั้นหรือใช้read_tags.pyสคริปต์

คลิกขวาที่ไฟล์ใดก็ได้ใน Nautilus (ไม่สำคัญว่าจะเลือกread_tags.pyไฟล์ไหน) เลือก ตีEnter ป้อนคำอธิบายรูปภาพที่นี่

คุณจะเห็นป๊อปอัพถามว่าคุณต้องการค้นหาแท็กใด:

ป้อนคำอธิบายรูปภาพที่นี่

OKเลือกหนึ่งคลิก คุณจะเห็นกล่องข้อความแสดงรายการที่คุณต้องการให้มีไฟล์สำหรับแท็กที่คุณเลือก คุณสามารถเลือกไฟล์เดียวและจะเปิดขึ้นพร้อมกับโปรแกรมเริ่มต้นที่กำหนดให้กับไฟล์ประเภทนั้น

ป้อนคำอธิบายรูปภาพที่นี่

4. รหัสที่มา:

tag_file.py:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Author: Serg Kolo  
# Date: Oct 1st, 2016
# Description: tag_file.py, script for
#    recording paths to files under 
#    specific , user-defined tag
#    in ~/.tagged_files
# Written for: http://askubuntu.com/q/827701/295286
# Tested on : Ubuntu ( Unity ) 16.04

from __future__ import print_function
import subprocess
import json
import os
import sys

def show_error(string):
    subprocess.call(['zenity','--error',
                     '--title',__file__,
                     '--text',string
    ])
    sys.exit(1)

def run_cmd(cmdlist):
    """ Reusable function for running external commands """
    new_env = dict(os.environ)
    new_env['LC_ALL'] = 'C'
    try:
        stdout = subprocess.check_output(cmdlist, env=new_env)
    except subprocess.CalledProcessError:
        pass
    else:
        if stdout:
            return stdout


def write_to_file(conf_file,tag,path_list):

    # if config file exists , read it
    data = {}
    if os.path.exists(conf_file):
        with open(conf_file) as f:
            data = json.load(f)

    if tag in data:
        for path in path_list:
            if path in data[tag]:
               continue
            data[tag].append(path)
    else:
        data[tag] = path_list

    with open(conf_file,'w') as f:
        json.dump(data,f,indent=4,sort_keys=True)

def get_tags(conf_file):

    if os.path.exists(conf_file):
       with open(conf_file) as f:
            data = json.load(f)
            return '|'.join(data.keys())

def main():

    user_home = os.path.expanduser('~')
    config = '.tagged_files'
    conf_path = os.path.join(user_home,config)
    file_paths = [ os.path.abspath(f) for f in sys.argv[1:] ]
    tags = None

    try:
        tags = get_tags(conf_path)
    except Exception as e:
        show_error(e)

    command = [ 'zenity','--forms','--title',
                'Tag the File' 
    ]

    if tags:
       combo = ['--add-combo','Existing Tags',
                '--combo-values',tags
       ]

       command = command + combo

    command = command + ['--add-entry','New Tag']

    result = run_cmd(command)
    if not result: sys.exit(1)
    result = result.decode().strip().split('|')
    for tag in result:
        if tag == '':
           continue
        write_to_file(conf_path,tag,file_paths)

if __name__ == '__main__':
     main()

read_tags.py:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Author: Serg Kolo  
# Date: Oct 1st, 2016
# Description: read_tags.py, script for
#    reading  paths to files under 
#    specific , user-defined tag
#    in ~/.tagged_files
# Written for: http://askubuntu.com/q/827701/295286
# Tested on : Ubuntu ( Unity ) 16.04

import subprocess
import json
import sys
import os


def run_cmd(cmdlist):
    """ Reusable function for running external commands """
    new_env = dict(os.environ)
    new_env['LC_ALL'] = 'C'
    try:
        stdout = subprocess.check_output(cmdlist, env=new_env)
    except subprocess.CalledProcessError as e:
        print(str(e))
    else:
        if stdout:
            return stdout

def show_error(string):
    subprocess.call(['zenity','--error',
                     '--title',__file__,
                     '--text',string
    ])
    sys.exit(1)

def read_tags_file(file,tag):

    if os.path.exists(file):
       with open(file) as f:
            data = json.load(f)
            if tag in data.keys():
                return data[tag]
            else:
                show_error('No such tag')
    else:
       show_error('Config file doesnt exist')

def get_tags(conf_file):
    """ read the tags file, return
        a string joined with | for
        further processing """    
    if os.path.exists(conf_file):
       with open(conf_file) as f:
            data = json.load(f)
            return '|'.join(data.keys())

def main():

    user_home = os.path.expanduser('~')
    config = '.tagged_files'
    conf_path = os.path.join(user_home,config)

    tags = get_tags(conf_path)
    command = ['zenity','--forms','--add-combo',
               'Which tag ?', '--combo-values',tags
    ]

    tag = run_cmd(command)

    if not tag:
       sys.exit(0)

    tag = tag.decode().strip()
    file_list = read_tags_file(conf_path,tag)
    command = ['zenity', '--list', 
               '--text','Select a file to open',
               '--column', 'File paths'
    ]
    selected = run_cmd(command + file_list)    
    if selected:
       selected = selected.decode().strip()
       run_cmd(['xdg-open',selected])

if __name__ == '__main__':
    try:
        main()
    except Exception as e:
        show_error(str(e))


ที่นี่หนาว. คุณมีทางออกที่น่าสนใจที่สุดเสมอ

@ เซอร์นี่วิเศษมาก แท็กจะติดเมื่อฉันย้ายไฟล์หรือไม่ หรือเมื่อฉันลบไฟล์พวกเขาจะยังคงปรากฏในผลการค้นหาหรือไม่
deshmukh

@deshmukh ไม่แท็กไม่ติดถ้าคุณย้ายไฟล์และไฟล์ที่ถูกลบจะปรากฏขึ้น ฉันสามารถใช้การตรวจสอบไฟล์ที่ถูกลบได้ (จริง ๆ แล้วมันเป็นเพียงไม่กี่บรรทัด) เป็นหลักคุณมีฐานข้อมูลของแท็กและไฟล์ของพวกเขา ans ฐานข้อมูลนี้จะต้องมีการบำรุงรักษา
Sergiy Kolodyazhnyy

@ เซอร์พวกเรายังอยู่ใกล้มาก เพราะถ้าแท็กประเภท 'ติด' กับไฟล์ (ดังนั้นจะยังคงอยู่แม้หลังจากย้ายไฟล์ไปรอบ ๆ ) มันจะดีหรือไม่ดีเท่าโครงสร้างไดเรกทอรีลำดับชั้นยกเว้นว่าไฟล์เดียวสามารถมีหลายแท็ก ฉันไม่ได้แม้สักครู่ก็ดูถูกผลงานที่ยอดเยี่ยมของคุณ ฉันแค่บอกว่ามันยังไม่ตอบสนองความต้องการของฉัน (อาจจะบ้า) นอกจากนี้ดังที่ jargonjunkie กล่าวไว้ในความคิดเห็นที่แยกต่างหากอาจจะติดแท็กไฟล์โดยตรงอาจเป็นวิธีการแก้ปัญหา (เช่นเราติดแท็กภาพถ่ายหรือที่คั่นหน้า) แต่นี่เป็นคำพูดของสามเณร
deshmukh

@deshmukh ฉันเห็นด้วยการติดแท็กไฟล์โดยตรงจะเหมาะ ฉันยังไม่พบวิธีที่จะทำ แต่อย่างน้อยก็ยัง ฉันลองสองสามวิธีแล้ว แต่พวกเขาไม่ได้ผลลัพธ์ใด ๆ ฉันอาจทำให้สคริปต์ที่ตรวจสอบเป็นระยะว่าไฟล์ทั้งหมดอยู่ในสถานที่ แต่นั่นเป็นสิ่งที่ดีที่สุดที่ฉันสามารถทำได้และมันจะไม่มีประสิทธิภาพสูงหากจำนวนไฟล์เพิ่มขึ้นอย่างมากในไฟล์ปรับแต่ง ฉันหวังว่านี่จะเป็นประโยชน์กับบางคน แต่ฉันเห็นด้วย - นี่ไม่ใช่วิธีการแก้ปัญหาที่คุณกำลังมองหา
Sergiy Kolodyazhnyy

1

ฉันได้พบวิธีการทำสิ่งนี้แล้ว

เปิดเทอร์มินัล ( CTRL+ ALT+ T) แล้วเรียกใช้คำสั่งนี้:

sudo add-apt-repository ppa:tracker-team/tracker

ป้อนรหัสผ่านของคุณและเมื่อพร้อมรับคำกด Enter จากนั้นเรียกใช้

sudo apt-get update

แล้วก็

sudo apt-get install tracker tracker-gui

ไม่ต้องกังวลหากมีข้อความว่าเป็นรุ่นล่าสุดอยู่แล้ว

ตอนนี้เปิด Nautilus / Files และคลิกขวาที่เอกสารที่คุณต้องการเพิ่มแท็ก เลือกคุณสมบัติจากนั้นเลือกแท็บที่ระบุว่า "แท็ก" ป้อนแท็กลงในกล่องข้อความแล้วกด Enter หรือคลิกปุ่มเพิ่มเพื่อเพิ่ม คุณสามารถคลิกแท็กที่คุณเพิ่มไว้แล้วและเลือกปุ่มลบเพื่อลบแท็ก โปรดทราบว่าแท็กจะเล็กและใหญ่ แท็กที่คุณสร้างจะคงอยู่ตลอดทั้งระบบดังนั้นคุณสามารถทำเครื่องหมายไว้ข้างๆแท็กที่คุณสร้างไว้แล้วเพื่อทำเครื่องหมายไฟล์แทนการพิมพ์ซ้ำด้วยตนเองอีกครั้ง

หลังจากติดแท็กรายการที่ต้องการคุณสามารถค้นหาได้ แต่ไม่อยู่ในไฟล์ ไปที่กิจกรรมและค้นหาแอDesktop Searchพ เปิดตัวและดูตัวเลือกที่ด้านบน ที่ด้านซ้ายบนของหน้าต่างให้คลิกที่ไอคอนโฟลเดอร์พร้อมด้วยเคล็ดลับเครื่องมือ "แสดงผลลัพธ์ตามไฟล์ในรายการ" ตอนนี้คุณมีตัวเลือกเพิ่มเติม เลือกตัวเลือกทางด้านซ้ายของช่องค้นหาด้วยเคล็ดลับเครื่องมือ "ค้นหาเกณฑ์การค้นหาในแท็กไฟล์เท่านั้น" ตอนนี้คุณสามารถค้นหาแท็ก!

หากต้องการใช้สิ่งนี้ให้ป้อนแท็กที่คุณต้องการค้นหาคั่นด้วยเครื่องหมายจุลภาคและกด Enter ตัวอย่างเช่น:

สิ่งสำคัญกันยายนการนำเสนอ

การดำเนินการนี้จะแสดงเฉพาะไฟล์ที่มีแท็กทั้งสาม: "สำคัญ", "กันยายน" และ "การนำเสนอ"

เมื่อดับเบิลคลิกหนึ่งครั้งไฟล์จะเปิดไฟล์ในโปรแกรมเริ่มต้นและโดยการคลิกขวาและเลือก "แสดงไดเรกทอรีหลัก" จะเป็นการเปิดตำแหน่งใน Nautilus

ในการค้นหาเดสก์ท็อปคุณสามารถคลิกปุ่มที่สองจากด้านขวาที่ด้านบนของหน้าต่าง (โดยปกติจะเป็นดาวหรือหัวใจ) เพื่อแก้ไขแท็กในแอป!

ที่นั่นคุณมีมัน! หวังว่านี่จะช่วยได้ หากคุณมีคำถามเพิ่มเติมแจ้งให้เราทราบ


0

คำตอบสั้น ๆ : สิ่งนี้ไม่สามารถเกิดขึ้นได้ในอูบุนตู คุณต้องมีนามสกุลหรือฐานข้อมูลเอกสารตามคำแนะนำอื่น ๆ

ตัวเลือกที่ฉันสามารถขอแนะนำก็คือการใช้แอพพลิเคTagSpaces แอพนี้อาจบันทึกแท็กในชื่อไฟล์ซึ่งทำให้การติดแท็กทนทานและพกพาได้ คุณสามารถแก้ไขชื่อไฟล์ใน Nautilus หรือภายใน Cloud-Storage ของคุณและแท็กจะปรากฏใน TagSpaces และในทางกลับกัน

ภาพหน้าจอ

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