web-dev-qa-db-fra.com

Comment puis-je étiqueter des fichiers et les rechercher plus tard en fonction de l'étiquette?

Exécuter Ubuntu Gnome.

J'ai beaucoup de PDF et d'autres documents et j'aimerai les taguer. Et recherchez-les plus tard en fonction de ces balises. Même si je déplace les fichiers dans des dossiers différents (les balises sont donc collées aux fichiers).

J'ai cherché mais Fichiers et Documents ne fournissent pas cette option.

Est-ce que je fais quelque chose de mal? Comment puis-je étiqueter des fichiers afin de pouvoir les rechercher ultérieurement en fonction des balises?

13
deshmukh

Contenu:

  1. Introduction
  2. Installation
  3. Usage
  4. Code source

1. Introduction

Cette solution consiste en deux scripts - un pour le balisage, un pour la lecture de la liste des fichiers sous un tag spécifique. Tous deux doivent résider dans ~/.local/share/nautilus/scripts et être activés par un clic droit dans le gestionnaire de fichiers Nautilus sur n’importe quel fichier et par la navigation dans le sous-menu Scripts. Le code source de chaque script est fourni ici ainsi que sur GitHub

2. Installation

Les deux scripts doivent être enregistrés dans ~/.local/share/nautilus/scripts, où ~ est le répertoire de base de l'utilisateur et rendu exécutable avec chmod +x filename. Pour une installation facile, utilisez le script bash suivant:

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

Balisage de fichiers :

Sélectionnez les fichiers dans le gestionnaire de fichiers Nautilus, cliquez dessus avec le bouton droit de la souris et accédez au sous-menu Scripts. Sélectionnez tag_file.py. Frappé Enter enter image description here La première fois que vous exécutez ce script, il n'y aura pas de fichier de configuration, vous verrez donc ceci:

enter image description here

La prochaine fois que vous avez déjà des fichiers étiquetés, une fenêtre contextuelle vous permettant de sélectionner une étiquette et/ou d'en ajouter une nouvelle (vous pouvez enregistrer des fichiers sous plusieurs étiquettes). Frappé OK pour ajouter des fichiers à cette balise. Remarque : évitez d'avoir "|" symbole dans le nom de la balise.

enter image description here

Le script enregistre tout dans ~/.tagged_files. Ce fichier est essentiellement un dictionnaire json (ce qui n’est pas quelque chose d’habituel, mais qui convient aux programmeurs :)). Le format de ce fichier est le suivant:

{
    "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 vous souhaitez "décocher" un fichier, supprimez simplement une entrée de cette liste. Attention au format et aux virgules.

Recherche par tag :

Maintenant que vous avez une belle base de données de fichiers ~/.tagged_files, vous pouvez lire ce fichier ou utiliser le script read_tags.py.

Faites un clic droit sur n’importe quel fichier dans Nautilus (peu importe lequel). Sélectionnez read_tags.py. Frappé Enter enter image description here

Vous verrez une pop-up vous demandant quelle balise vous souhaitez rechercher:

enter image description here

Sélectionnez-en un, cliquez OK. Vous verrez une boîte de dialogue de liste indiquant que vous souhaitez que les fichiers correspondant à la balise sélectionnée soient présents. Vous pouvez sélectionner n'importe quel fichier et celui-ci s'ouvrira avec un programme par défaut affecté à ce type de fichier.

enter image description here

4. Code source:

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 __== '__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 __== '__main__':
    try:
        main()
    except Exception as e:
        show_error(str(e))

8

J'ai trouvé un moyen de le faire.

Ouvrez un terminal (CTRL+ALT+T) puis exécutez cette commande:

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

Entrez votre mot de passe et, lorsque vous y êtes invité, appuyez sur Entrée, puis exécutez

Sudo apt-get update

puis

Sudo apt-get install tracker tracker-gui

Ne vous inquiétez pas si cela indique que c'est déjà la dernière version.

Ouvrez maintenant Nautilus/Files et cliquez avec le bouton droit de la souris sur le document auquel vous souhaitez ajouter des balises. Sélectionnez les propriétés, puis sélectionnez l'onglet qui dit "Tags". Entrez une étiquette dans la zone de texte et appuyez sur Entrée ou cliquez sur le bouton Ajouter pour l'ajouter. Vous pouvez également cliquer sur une étiquette que vous avez déjà ajoutée et sélectionner le bouton Supprimer pour supprimer une étiquette. Veuillez noter que les tags sont sensibles à la casse. Les balises que vous créez seront persistantes sur l'ensemble du système. Vous pouvez donc facilement cocher une balise que vous avez déjà créée pour marquer le fichier au lieu de la saisir à nouveau manuellement.

Après avoir marqué les éléments recherchés, vous pouvez maintenant les rechercher, mais pas dans Fichiers. Accédez aux activités et recherchez l'application Desktop Search. Lancez-le et regardez les options en haut. En haut à gauche de la fenêtre, cliquez sur l'icône du dossier avec l'info-bulle "Afficher les résultats par fichiers dans une liste". Maintenant, vous avez plus d'options. Sélectionnez l'option juste à gauche du champ de recherche avec l'info-bulle "Rechercher les critères de recherche dans les balises de fichier uniquement". Maintenant, vous pouvez rechercher des tags!

Pour l'utiliser, entrez les balises que vous souhaitez rechercher, séparées par des virgules, puis appuyez sur entrée. Par exemple:

Important, septembre, présentation

Cela ne montrera que les fichiers qui ont les trois balises: "Important", "Septembre" et "Présentation".

En double-cliquant sur un, il ouvrira le fichier dans le programme par défaut. En cliquant avec le bouton droit de la souris et en sélectionnant "Afficher le répertoire parent", il ouvrira son emplacement dans Nautilus.

Dans Desktop Search, vous pouvez également cliquer sur le deuxième bouton de la droite en haut de la fenêtre (généralement une étoile ou un cœur) pour modifier les tags dans l'application elle-même!

Voilà! J'espère que cela t'aides. Si vous avez d'autres questions, faites le moi savoir.

1
ComputerGuy