Как я могу отметить файлы и искать их позже на основе тега?

Рабочий Gnome Ubuntu.

У меня есть много PDF и других документов, и мне понравится отмечать их. И ищите их позже на основе этих тегов. Даже если я перемещаю файлы в различные папки (так, теги придерживаются файлов).

Я искал, но Файлы и Документы не предоставляют этому возможности.

Я делаю что-то не так? Как я могу отметить файлы, таким образом, я могу искать их на основе тегов позже?

14
задан 26 September 2016 в 08:53

3 ответа

Я нашел способ сделать это.

Открывают терминал ( 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 или нажмите кнопку Add для добавления его. Можно также нажать тег, Вы уже добавили и нажимаете кнопку Remove для удаления тега. Обратите внимание на то, что теги чувствительны к регистру. Теги, которые Вы создаете, будут персистентными по всей системе, таким образом, можно будет легко поместить проверку рядом с тегом, Вы уже создали для маркировки файла вместо вручную typig она снова.

После меток требуемых объектов, можно теперь искать их, но не в Файлах. Перейдите к операциям и ищите приложение Desktop Search. Запустите его и посмотрите на опции наверху. В главной левой стороне Окна нажмите значок папки подсказкой "Результаты дисплея файлами в списке". Теперь у Вас есть больше опций. Выберите опцию только слева от поля поиска с подсказкой, "Находят, что критерии поиска в файле отмечают только". Теперь можно искать теги!

Для использования этого введите теги, которые Вы хотите искать, разделенный запятыми и нажать Enter. Например:

Важный, сентябрь, Презентация

Это только покажет файлы, которые имеют все три тега: "Важный", "сентябрь" и "Презентация".

Путем двойного щелчка один, это откроет файл в программе по умолчанию, и путем щелчка правой кнопкой и выбора "Выставочного Родительского каталога", это откроется, это - местоположение в Наутилусе.

В Поиске по компьютеру, можно также нажать вторую кнопку справа наверху окна (обычно звезда или основа) для редактирования тегов в самом приложении!

Там у Вас есть он!Надеюсь, это поможет. Если у Вас больше есть вопросы, сообщить мне.

1
ответ дан 23 November 2019 в 03:05

Содержание:

  1. Введение
  2. Установка
  3. Использование
  4. Исходный код

1. Введение

Это решение состоит из двух сценариев - один для меток, один для чтения списка файлов под определенным тегом. Оба должны жить в ~/.local/share/nautilus/scripts и активированный через щелчок правой кнопкой в файловом менеджере Наутилуса на любом файле, и перешедший к подменю 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. Использование:

Метки файлов:

Выберите файлы в файловом менеджере Наутилуса, щелкните правой кнопкой по ним и перейдите к подменю Scripts. Выбрать tag_file.py. Хит Входит enter image description here В первый раз, когда Вы запускаете этот скрипт, не будет никакого конфигурационного файла, таким образом, Вы будете видеть это:

enter image description here

В следующий раз, когда у Вас уже есть некоторые отмеченные файлы, Вы будете видеть всплывающее окно, которое позволяет Вам выбирать тег и/или добавлять новый один (этот способ, которым можно записать файлы под несколькими тегами). Хит хорошо для добавления файлов к этому тегу.Примечание: Постарайтесь не иметь "|" символ на имя тега.

enter image description here

Сценарий записывает все в ~/.tagged_files. Тот файл по существу a 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"
    ]
}

Если Вы когда-нибудь хотите "снять метку" с некоторого файла, просто удалите запись из того списка. Следите за форматом и запятыми.

Поиск тегом:

Теперь, когда у Вас есть хорошее ~/.tagged_files база данных файлов, можно или считать тот файл или использование read_tags.py сценарий.

Щелкните правой кнопкой по любому файлу в Наутилусе (действительно не имеет значения который).Select read_tags.py. Хит входит enter image description here

Вы будете видеть, что всплывающее окно спрашивает Вас, что отмечает Вас, хотите искать:

enter image description here

Выберите один, нажмите "OK". Вы будете видеть, что диалоговое окно списка показывает, желание файлов, там для тега, который Вы выбрали. Можно выбрать любой единственный файл, и он откроется программой по умолчанию, присвоенной тому типу файла.

enter image description here

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))

9
ответ дан 23 November 2019 в 03:05

Краткий ответ: это невозможно изначально в Ubuntu. Вам нужно какое-то расширение или база данных документов, как предлагают другие ответы.

Другой вариант, который я могу порекомендовать, - использовать приложение TagSpaces . Это приложение может сохранять теги в имени файла , что делает теги надежными и переносимыми. Вы можете изменить имя файла в Nautilus или в облачном хранилище, и тег появится в TagSpaces и наоборот.

screenshot

0
ответ дан 20 January 2020 в 14:10

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

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