सामग्री:
- परिचय
- स्थापना
- प्रयोग
- सोर्स कोड
1। परिचय
इस समाधान में दो स्क्रिप्ट शामिल हैं - एक टैगिंग के लिए, एक विशिष्ट टैग के तहत फाइलों की सूची पढ़ने के लिए। दोनों को ~/.local/share/nautilus/scripts
किसी भी फ़ाइल पर Nautilus फ़ाइल प्रबंधक में राइट-क्लिक के माध्यम से रहना और सक्रिय करना होगा, और लिपियों को सबवेस्टू पर नेविगेट करना होगा। प्रत्येक स्क्रिप्ट के लिए स्रोत कोड यहाँ और साथ ही GitHub पर प्रदान किया गया है
2. स्थापना
दोनों लिपियों को सहेजना होगा ~/.local/share/nautilus/scripts
, जहां ~
उपयोगकर्ता की घरेलू निर्देशिका है, और इसके साथ निष्पादन योग्य बनाया गया है chmod +x filename
। आसान स्थापना के लिए, निम्नलिखित बैश स्क्रिप्ट का उपयोग करें:
#!/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. उपयोग:
फ़ाइलें टैग करना :
Nautilus फ़ाइल प्रबंधक में फ़ाइलों का चयन करें, उन पर राइट क्लिक करें, और लिपियों सबमेनू पर नेविगेट करें। का चयन करें tag_file.py
। हिट Enter
पहली बार जब आप इस स्क्रिप्ट को चलाते हैं, तो कोई कॉन्फ़िगरेशन फ़ाइल नहीं होगी, इसलिए आप इसे देखेंगे:
अगली बार, जब आपके पास पहले से ही कुछ फाइलें टैग होंगी, तो आपको एक पॉपअप दिखाई देगा जो आपको एक टैग का चयन करने और / या नया जोड़ने की अनुमति देता है (इस तरह आप कई टैग के तहत फाइल रिकॉर्ड कर सकते हैं)। OKइस टैग में फ़ाइलें जोड़ने के लिए हिट करें। नोट : "होने से बचें।" टैग नाम में प्रतीक।
स्क्रिप्ट सब कुछ रिकॉर्ड करती है ~/.tagged_files
। वह फ़ाइल अनिवार्य रूप से एक json
शब्दकोश है (जो कुछ नियमित उपयोगकर्ताओं को परवाह नहीं करनी चाहिए, लेकिन यह प्रोग्रामर के लिए सुविधाजनक है :))। उस फ़ाइल का प्रारूप इस प्रकार है:
{
"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"
]
}
यदि आप कभी भी किसी फ़ाइल को "अनअग" करना चाहते हैं, तो बस उस सूची में से एक प्रविष्टि हटा दें। प्रारूप और अल्पविराम का ध्यान रखें।
टैग द्वारा खोज :
अब जब आपके पास ~/.tagged_files
फ़ाइलों का एक अच्छा डेटाबेस है, तो आप या तो उस फ़ाइल को पढ़ सकते हैं, या read_tags.py
स्क्रिप्ट का उपयोग कर सकते हैं ।
Nautilus में किसी भी फाइल पर राइट क्लिक करें (वास्तव में इससे कोई फर्क नहीं पड़ता) read_tags.py
। मारोEnter
आपको एक पॉपअप दिखाई देगा जो आपसे पूछेगा कि आप किस टैग को खोजना चाहते हैं:
एक का चयन करें, क्लिक करें OK। आपको एक सूची डायलॉग दिखाई देगा जिसमें आपको यह दिखाया जाएगा कि आपके द्वारा चुने गए टैग के लिए फाइलें हैं। आप किसी भी एकल फ़ाइल का चयन कर सकते हैं और यह उस फ़ाइल प्रकार को दिए गए डिफ़ॉल्ट प्रोग्राम के साथ खुलेगा।
4. स्रोत कोड:
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))