Como posso marcar arquivos e pesquisá-los posteriormente com base na tag?

13

Executando o Ubuntu Gnome.

Eu tenho muito PDF e outros documentos e gostaria de marcá-los. E pesquise mais tarde com base nessas tags. Mesmo se eu mover os arquivos para pastas diferentes (assim, as tags ficarão nos arquivos).

Eu pesquisei, mas Arquivos e documentos não oferecem essas opções.

Estou fazendo algo errado? Como posso marcar arquivos para que eu possa pesquisá-los com base em tags posteriormente?

    
por deshmukh 21.09.2016 / 05:56

2 respostas

8

Conteúdo:

  1. Introdução
  2. Instalação
  3. Uso
  4. Código-fonte

1. Introdução

Esta solução consiste em dois scripts - um para marcação, um para ler a lista de arquivos em uma tag específica. Ambos têm que viver em ~/.local/share/nautilus/scripts e ativados via clique com o botão direito do mouse no gerenciador de arquivos Nautilus em qualquer arquivo, e navegando para o submenu Scripts. O código-fonte de cada script é fornecido aqui, bem como em GitHub

2. Instalação

Ambos os scripts precisam ser salvos em ~/.local/share/nautilus/scripts , onde ~ é o diretório inicial do usuário e tornados executáveis com chmod +x filename . Para facilitar a instalação, use o seguinte script:

#!/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. Uso:

Marcando arquivos :

Selecione os arquivos no gerenciador de arquivos Nautilus, clique com o botão direito neles e navegue até o submenu Scripts. Selecione tag_file.py . Pressione Enter Aprimeiravezquevocêexecutarestescript,nãohaveráarquivodeconfiguração,entãovocêveráisto:

Dapróximavez,quandovocêjátiveralgunsarquivosmarcados,veráumpop-upquepermiteselecionarumatage/ouadicionarumanova(dessaforma,vocêpodegravararquivosemváriastags).PressioneOKparaadicionararquivosaestatag.Nota:eviteter"|" símbolo no nome da tag.

Oscriptregistratudoem~/.tagged_files.Essearquivoéessencialmenteumdicionáriojson(quenãoéalgoqueosusuáriosregularesdevemseimportar,maséconvenienteparaosprogramadores:)).Oformatodessearquivoéoseguinte:

{"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"
    ]
}

Se você quiser "desmarcar" algum arquivo, basta excluir uma entrada da lista. Mente o formato e as vírgulas.

Pesquisa por tag :

Agora que você tem um bom banco de dados ~/.tagged_files de arquivos, é possível ler esse arquivo ou usar o script read_tags.py .

Clique com o botão direito do mouse em qualquer arquivo do Nautilus (realmente não importa qual) .Selecione read_tags.py . Pressione Enter

Vocêveráumpop-upperguntandoqualtagdesejapesquisar:

Selecioneum,cliqueemOK.Vocêveráumacaixadediálogomostrandoqueosarquivosestãoláparaatagquevocêselecionou.Vocêpodeselecionarqualquerarquivoúnicoeeleseráabertocomumprogramapadrãoatribuídoaessetipodearquivo.

4.Códigofonte:

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))
por Sergiy Kolodyazhnyy 02.10.2016 / 01:43
1

Eu encontrei uma maneira de fazer isso.

Abra um terminal ( CTRL + ALT + T ) e então execute este comando:

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

Digite sua senha e, quando solicitado, pressione Enter e, em seguida, execute

sudo apt-get update

então

sudo apt-get install tracker tracker-gui

Não se preocupe se disser que já é a versão mais recente.

Agora abra o Nautilus / Files e clique com o botão direito do mouse no documento ao qual deseja adicionar tags. Selecione propriedades e, em seguida, selecione a guia "Tags". Digite uma tag na caixa de texto e pressione Enter ou clique no botão Adicionar para adicioná-la. Você também pode clicar em uma tag que você já adicionou e selecionar o botão Remover para remover uma tag. Por favor, note que as tags são sensíveis a maiúsculas e minúsculas. As tags criadas por você serão persistentes em todo o sistema, para que você possa marcar com facilidade uma marca ao lado de uma tag que você já criou para marcar o arquivo, em vez de digitá-lo novamente manualmente.

Após marcar os itens desejados, você pode procurar por eles, mas não em Arquivos. Vá para atividades e pesquise pelo aplicativo Desktop Search . Lance-o e observe as opções no topo. No canto superior esquerdo da janela, clique no ícone da pasta com a dica de ferramenta "Exibir resultados por arquivos em uma lista". Agora você tem mais opções. Selecione a opção à esquerda da caixa de pesquisa com a dica de ferramenta "Localizar critérios de pesquisa apenas nas tags de arquivo". Agora você pode pesquisar tags!

Para usar isso, insira as tags que deseja pesquisar, separadas por vírgulas e pressione Enter. Por exemplo:

Importante, setembro, apresentação

Isso só mostrará arquivos que tenham todas as três tags: "Importante", "Setembro" e "Apresentação".

Ao clicar duas vezes, ele abrirá o arquivo no programa padrão, e clicando com o botão direito e selecionando "Show Parent Directory", ele irá abrir sua localização no Nautilus.

Na Pesquisa do Google Desktop, você também pode clicar no segundo botão da direita na parte superior da janela (geralmente uma estrela ou um coração) para editar tags no próprio aplicativo!

Lá você tem! Espero que isto ajude. Se você tiver mais alguma dúvida, me avise.

    
por ComputerGuy 26.09.2016 / 18:56