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?
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
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"
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 La première fois que vous exécutez ce script, il n'y aura pas de fichier de configuration, vous verrez donc ceci:
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.
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
Vous verrez une pop-up vous demandant quelle balise vous souhaitez rechercher:
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.
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))
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.