Inhalt:
- Einführung
- Installation
- Verwendung
- Quellcode
1. Einleitung
Diese Lösung besteht aus zwei Skripten - eines zum Markieren und eines zum Lesen der Liste der Dateien unter einem bestimmten Tag. Beide müssen ~/.local/share/nautilus/scripts
im Nautilus-Dateimanager mit der rechten Maustaste auf eine Datei klicken und diese aktivieren und zum Untermenü „Skripte“ navigieren. Der Quellcode für jedes Skript wird hier sowie auf GitHub bereitgestellt
2. Installation
Beide Skripte werden müssen , gespeichert ~/.local/share/nautilus/scripts
, wo ~
sich Home - Verzeichnis des Benutzers und mit ausführbar gemacht chmod +x filename
. Verwenden Sie zur einfachen Installation das folgende Bash-Skript:
#!/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. Verwendung:
Dateien markieren :
Wählen Sie Dateien im Nautilus-Dateimanager aus, klicken Sie mit der rechten Maustaste darauf und navigieren Sie zum Untermenü Skripts. Auswählen tag_file.py
. Wenn Enter
Sie dieses Skript zum ersten Mal ausführen, ist keine Konfigurationsdatei vorhanden. Sie sehen also Folgendes:
Wenn Sie das nächste Mal bereits Dateien mit Tags versehen haben, wird ein Popup-Fenster angezeigt, in dem Sie ein Tag auswählen und / oder ein neues hinzufügen können (auf diese Weise können Sie Dateien unter mehreren Tags aufzeichnen). Klicken Sie OKauf, um Dateien zu diesem Tag hinzuzufügen. Hinweis : Vermeiden Sie "|" Symbol im Tag-Namen.
Das Skript zeichnet alles auf ~/.tagged_files
. Diese Datei ist im Wesentlichen ein json
Wörterbuch (was nicht für normale Benutzer wichtig ist, aber für Programmierer praktisch :)). Das Format dieser Datei ist wie folgt:
{
"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"
]
}
Wenn Sie jemals eine Datei "entmarkieren" möchten, löschen Sie einfach einen Eintrag aus dieser Liste. Beachten Sie das Format und die Kommas.
Suche nach Tag :
Jetzt, da Sie eine schöne ~/.tagged_files
Datenbank mit Dateien haben, können Sie diese Datei entweder lesen oder ein read_tags.py
Skript verwenden.
Klicken Sie mit der rechten Maustaste auf eine beliebige Datei in Nautilus (egal welche) read_tags.py
. SchlagenEnter
Sie werden in einem Popup gefragt, nach welchem Tag Sie suchen möchten:
Wählen Sie einen aus und klicken Sie auf OK. Sie sehen ein Listendialogfeld, in dem angezeigt wird, dass die gewünschten Dateien für das ausgewählte Tag vorhanden sind. Sie können eine einzelne Datei auswählen, die mit einem Standardprogramm geöffnet wird, das diesem Dateityp zugewiesen ist.
4. Quellcode:
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))