मैं फ़ाइलों को कैसे टैग कर सकता हूं और बाद में टैग के आधार पर उन्हें कैसे खोज सकता हूं?


15

उबुन्टू सूक्ति चल रहा है।

मेरे पास बहुत सारे पीडीएफ और अन्य दस्तावेज हैं और मैं उन्हें टैग करना चाहूंगा। और बाद में इन टैग के आधार पर उन्हें खोजें। भले ही मैं फ़ाइलों को अलग-अलग फ़ोल्डरों में स्थानांतरित कर दूं (इसलिए, टैग फ़ाइलों से चिपके रहते हैं)।

मैंने खोजा लेकिन फ़ाइलें और दस्तावेज़ यह विकल्प प्रदान नहीं करते हैं।

क्या मुझसे कुछ ग़लत हो रहा है? मैं फ़ाइलों को कैसे टैग कर सकता हूं ताकि बाद में टैग के आधार पर उन्हें खोज सकूं?


केवल पीडीएफ डॉक्यूमेंट्स को जोड़ने के लिए सवाल का हिस्सा (लेकिन खोज टैग का हिस्सा नहीं है) इस उत्तर को
कैरेल

क्या आप टैगिंग के बजाय "बुकमार्क" फ़ाइल को विकल्प के रूप में मानेंगे?
सेर्गेई कोलोडियाज़नी 15

@ मैं स्पष्ट नहीं हूं। क्या आप थोड़ा समझा सकते हैं? क्या इन बुकमार्क्स में फ़ायरफ़ॉक्स बुकमार्क जैसे टैग हो सकते हैं? यदि मैं फ़ाइल ले जाऊं तो भी वे बने रहेंगे?
deshmukh

@deshmukh यहां मैंने पहले क्या किया है: askubuntu.com/q/803644/295286 मूल रूप से यह एक फ़ोल्डर के अंदर फाइल करने के लिए एक सिमलिंक बनाता है। दूसरी ओर, मैं टैग की सूची को लागू कर सकता था, और प्रत्येक टैग के लिए फ़ाइलों की सूची होगी। वर्तमान में मैं कुछ हद तक व्यस्त हूं, इसलिए मुझे प्रतिक्रिया देने में हमेशा के लिए लग जाता है, लेकिन मैं ASAP जवाब देने की कोशिश करूंगा। क्या इस एक बार आउट होने के बाद फिर से बाउंटी लगाना संभव होगा?
सेर्गेई कोलोडियाज़नी

@ मैं एक और इनाम की पेशकश करने के लिए पर्याप्त समृद्ध नहीं हूं :) लेकिन अगर यह कोई किसी को जीते बिना चला जाता है (क्या यह भी संभव है?) और यदि आपका जवाब (जब यह आता है) सबसे अच्छा है, तो निश्चित रूप से, मैं इनाम की पेशकश करूंगा आप :) :)
देशमुख 6

जवाबों:


9

सामग्री:

  1. परिचय
  2. स्थापना
  3. प्रयोग
  4. सोर्स कोड

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


यह अच्छा है। आप हमेशा सबसे दिलचस्प समाधान है।

@ यह अद्भुत है। जब मैं फ़ाइलों को ले जाऊंगा तो क्या टैग चिपके रहेंगे? या जब मैं फ़ाइलों को हटाता हूं, तो क्या वे अभी भी खोज परिणामों में दिखाई देंगे?
desmukh

@deshmukh नहीं, यदि आप फ़ाइलों को स्थानांतरित नहीं करते हैं, तो टैग चिपके नहीं रहते हैं, और हटाई गई फ़ाइलें दिखाई नहीं देती हैं। मैं हटाए गए फ़ाइलों के लिए जाँच लागू कर सकता है (वास्तव में आसानी से, यह सिर्फ कुछ पंक्तियाँ है)। अनिवार्य रूप से आपके पास टैग और उनकी फ़ाइलों का एक डेटाबेस है, ans इस डेटाबेस को बनाए रखना होगा
सर्गी कोलोडियाज़नी

@ हम अभी तक इतने निकट हैं। क्योंकि जब तक फ़ाइलों के टैग प्रकार "चिपके नहीं रहते हैं (इसलिए वे फ़ाइल को इधर-उधर ले जाने के बाद भी बने रहते हैं), यह उतना अच्छा या उतना ही बुरा है जितना कि एक पदानुक्रमित निर्देशिका संरचना को छोड़कर, एक फ़ाइल में कई टैग हो सकते हैं। मैं एक पल के लिए भी नहीं हूँ, आपके उत्कृष्ट कार्य के कारण। मैं केवल यह कह रहा हूं कि यह अभी भी मेरी (हो सकता है, पागल) जरूरतों को संबोधित नहीं करता है। इसके अलावा, जैसा कि jargonjunkie ने एक अलग टिप्पणी में कहा था, हो सकता है कि फ़ाइलें सीधे टैग की जा रही हों, वे समाधान हो सकते हैं (जैसे हम तस्वीरों या बुकमार्क को टैग करते हैं)। लेकिन ये एक नौसिखिए के शब्द हैं।
देषमुख

@deshmukh मैं सहमत हूं, सीधे फाइलों को टैग करना आदर्श होगा। मुझे बस ऐसा करने का कोई रास्ता नहीं मिला है, अभी तक कम से कम नहीं। मैंने कुछ दृष्टिकोण आजमाए, लेकिन उन्होंने कोई परिणाम नहीं दिया। मैं संभावित रूप से एक स्क्रिप्ट बना सकता हूं जो समय-समय पर जांचती है कि क्या सभी फाइलें जगह में हैं, लेकिन यह सबसे अच्छा मैं कर सकता हूं, और अगर फाइल में संख्या बड़ी हो जाती है तो यह अत्यधिक अक्षम होगा। मुझे आशा है कि यह कुछ के लिए उपयोगी हो सकता है, लेकिन मैं सहमत हूं - यह बिल्कुल एक समाधान नहीं है जो आप मांग रहे हैं
सर्जियो कोलोडियाज़नी

1

मुझे ऐसा करने का एक तरीका मिल गया है।

एक टर्मिनल खोलें ( CTRL+ ALT+ T) और फिर इस कमांड को चलाएं:

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

अपना पासवर्ड डालें, और जब प्रॉम्प्ट किया जाए, तो एंटर दबाएं, फिर चलाएं

sudo apt-get update

फिर

sudo apt-get install tracker tracker-gui

चिंता न करें अगर यह कहता है कि यह पहले से ही नवीनतम संस्करण है।

अब Nautilus / Files को खोलें और उस दस्तावेज़ पर राइट क्लिक करें जिसे आप टैग जोड़ना चाहते हैं। गुण चुनें, फिर "टैग" कहने वाले टैब का चयन करें। टेक्स्ट बॉक्स में एक टैग दर्ज करें और इसे जोड़ने के लिए Enter बटन दबाएं या क्लिक करें। आप पहले से जोड़े गए टैग पर भी क्लिक कर सकते हैं और टैग हटाने के लिए निकालें बटन का चयन कर सकते हैं। कृपया ध्यान दें कि टैग केस संवेदी हैं। आपके द्वारा बनाए गए टैग पूरे सिस्टम में लगातार बने रहेंगे, इसलिए आप आसानी से एक टैग के बगल में एक चेक डाल सकते हैं जो आपने पहले से बनाई गई फ़ाइल को मैन्युअल रूप से टाइप करने के बजाय इसे फिर से टाइप किया है।

आइटमों को टैग करने के बाद, आप अब उन्हें खोज सकते हैं, लेकिन फाइलों में नहीं। गतिविधियों पर जाएं, और ऐप खोजें Desktop Search। इसे लॉन्च करें, और शीर्ष पर विकल्प देखें। विंडो के ऊपर बाईं ओर, टूल टिप के साथ फ़ोल्डर आइकन पर क्लिक करें "एक सूची में फ़ाइलों द्वारा परिणाम प्रदर्शित करें"। अब आपके पास और विकल्प हैं। टूल टिप "केवल फ़ाइल टैग में खोज मानदंड खोजें" के साथ खोज बॉक्स के बाईं ओर विकल्प का चयन करें। अब आप टैग खोज सकते हैं!

इसका उपयोग करने के लिए, उन टैगों को दर्ज करें जिन्हें आप खोजना चाहते हैं, अल्पविराम से अलग करें और एंटर दबाएं। उदाहरण के लिए:

महत्वपूर्ण, सितंबर, प्रस्तुति

यह केवल उन फ़ाइलों को दिखाएगा जिनके तीनों टैग हैं: "महत्वपूर्ण", "सितंबर", और "प्रस्तुति"।

डबल क्लिक करके, यह डिफ़ॉल्ट प्रोग्राम में फाइल को खोलेगा, और राइट शो "पेरेंट डायरेक्टरी" को क्लिक करके, यह Nautilus में लोकेशन खोलेगा।

डेस्कटॉप सर्च में, आप विंडो के शीर्ष पर दाईं ओर से दूसरा बटन (आमतौर पर एक स्टार या दिल) पर क्लिक कर सकते हैं ताकि ऐप में ही टैग संपादित हो सकें!

ये लो! उम्मीद है की यह मदद करेगा। अगर आपके कोई और ज्यादा सवाल हैं, तो मुझे बताएं।


0

संक्षिप्त उत्तर: यह उबंटू में मूल रूप से संभव नहीं है। आपको कुछ एक्सटेंशन या दस्तावेज़ डेटाबेस की आवश्यकता है, जैसा कि अन्य उत्तरों द्वारा सुझाया गया है।

एक और विकल्प जो मैं सुझा सकता हूं वह है ऐप टैगस्पेस का उपयोग करना । यह ऐप फ़ाइल नाम में टैग को सहेज सकता है , जो टैगिंग को टिकाऊ और पोर्टेबल बनाता है। आप फ़ाइल नाम Nautilus में या अपने क्लाउड-स्टोरेज के भीतर संपादित कर सकते हैं और टैग TagSpaces में दिखाई देगा और इसके विपरीत।

स्क्रीनशॉट

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.