¿Cómo puedo etiquetar archivos y buscarlos luego según la etiqueta?

Ejecutando Ubuntu Gnome.

Tengo muchos PDF y otros documentos y me gustaría etiquetarlos. Y búscalos más tarde en base a estas tags. Incluso si muevo los archivos a carpetas diferentes (por lo tanto, las tags se pegan a los archivos).

Busqué pero Archivos y Documentos no proporcionan estas opciones.

¿Estoy haciendo algo mal? ¿Cómo puedo etiquetar archivos para poder buscarlos según las tags más adelante?

Contenido:

  1. Introducción
  2. Instalación
  3. Uso
  4. Código fuente

1. Introducción

Esta solución consta de dos scripts: uno para etiquetar y otro para leer la lista de archivos bajo una etiqueta específica. Ambos tienen que vivir en ~/.local/share/nautilus/scripts y se activan mediante un clic derecho en el administrador de archivos Nautilus en cualquier archivo, y navegan al submenú Scripts. El código fuente de cada script se proporciona aquí, así como en GitHub

2. Instalación

Ambos scripts deben guardarse en ~/.local/share/nautilus/scripts , donde ~ es el directorio de inicio del usuario, y ejecutarse con chmod +x filename . Para una fácil instalación, use el siguiente script de bash:

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

Etiquetando archivos :

Seleccione los archivos en el administrador de archivos de Nautilus, haga clic con el botón derecho sobre ellos y navegue hasta el submenú Scripts. Seleccione tag_file.py . Pulsa enter introduzca la descripción de la imagen aquí La primera vez que ejecute este script, no habrá ningún archivo de configuración, por lo que verá esto:

introduzca la descripción de la imagen aquí

La próxima vez, cuando ya tengas etiquetados algunos archivos, verás una ventana emergente que te permite seleccionar una etiqueta y / o agregar una nueva (de esta manera puedes grabar archivos bajo varias tags). Presione Aceptar para agregar archivos a esta etiqueta. Nota : Evite tener “|” símbolo en el nombre de la etiqueta.

introduzca la descripción de la imagen aquí

El script registra todo en ~/.tagged_files . Ese archivo es esencialmente un diccionario json (que no es algo que los usuarios habituales deban preocuparse, pero es conveniente para los progtwigdores :)). El formato de ese archivo es el siguiente:

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

Si alguna vez desea “desmarcar” algún archivo, simplemente elimine una entrada de esa lista. Cuidado con el formato y las comas.

Buscando por etiqueta :

Ahora que tiene una buena base de datos de archivos ~/.tagged_files , puede leer ese archivo o usar el script read_tags.py .

Haga clic derecho en cualquier archivo en Nautilus (realmente no importa cuál). read_tags.py . Pulsa enter introduzca la descripción de la imagen aquí

Verá una ventana emergente que le preguntará qué etiqueta desea buscar:

introduzca la descripción de la imagen aquí

Seleccione uno, haga clic en Aceptar . Verá un cuadro de diálogo de lista que muestra que desea que haya archivos para la etiqueta que seleccionó. Puede seleccionar cualquier archivo individual y se abrirá con un progtwig predeterminado asignado a ese tipo de archivo.

introduzca la descripción de la imagen aquí

4. Código fuente:

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

He encontrado una manera de hacer esto.

Abra un terminal ( CTRL + ALT + T ) y luego ejecute este comando:

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

Ingrese su contraseña, y cuando se le solicite, presione Entrar, luego ejecute

sudo apt-get update

entonces

sudo apt-get install tracker tracker-gui

No te preocupes si dice que ya es la última versión.

Ahora abra Nautilus / Files y haga clic derecho en el documento al que desea agregar tags. Seleccione propiedades, luego seleccione la pestaña que dice “Etiquetas”. Ingrese una etiqueta en el cuadro de texto y presione Intro o haga clic en el botón Agregar para agregarla. También puede hacer clic en una etiqueta que ya ha agregado y seleccionar el botón Eliminar para eliminar una etiqueta. Tenga en cuenta que las tags distinguen entre mayúsculas y minúsculas. Las tags que cree serán persistentes en todo el sistema, por lo que puede colocar fácilmente una marca junto a la etiqueta que ya creó para marcar el archivo en lugar de tipearlo manualmente de nuevo.

Después de etiquetar los elementos deseados, ahora puede buscarlos, pero no en Archivos. Vaya a las actividades y busque la aplicación Desktop Search . Lánzalo y mira las opciones en la parte superior. En la parte superior izquierda de la ventana, haga clic en el icono de carpeta con la información sobre herramientas “Mostrar resultados por archivos en una lista”. Ahora tienes más opciones. Seleccione la opción que se encuentra a la izquierda del cuadro de búsqueda con la información sobre herramientas “Buscar criterios de búsqueda solo en tags de archivo”. Ahora puedes buscar tags!

Para usar esto, ingrese las tags que desea buscar, separadas por comas y presione enter. Por ejemplo:

Importante, Septiembre, Presentación

Esto solo mostrará los archivos que tienen las tres tags: “Importante”, “Septiembre” y “Presentación”.

Al hacer doble clic en uno, abrirá el archivo en el progtwig predeterminado y, al hacer clic con el botón derecho y seleccionar “Mostrar directorio de padres”, abrirá su ubicación en Nautilus.

En Desktop Search, también puede hacer clic en el segundo botón de la derecha en la parte superior de la ventana (generalmente una estrella o un corazón) para editar las tags en la aplicación.

¡Ahí tienes! Espero que esto ayude. Si tienes más preguntas, házmelo saber.