फ़ोल्डर को दो फ़ोल्डरों का प्रतीकात्मक लिंक बनाएं?


10

मैं उबंटू के डिफॉल्ट म्यूज़िक फोल्डर /home/$USER/Musicको पसंद करूंगा जो कि विंडोज़ में लाइब्रेरी की तरह काम करेगा। अनिवार्य रूप से यह एक आभासी फ़ोल्डर होगा जिसमें अन्य फ़ोल्डर्स की सामग्री होगी।

मेरा औचित्य है रिदम बॉक्स, नए संगीत के लिए केवल एक फ़ोल्डर देखेगा। मेरा सारा संगीत दो फ़ोल्डरों में रहता है /home/$USER/Dropbox/Musicऔर /home/$USER/Dropbox/New Music

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

मैंने खोज की और बिना किसी लाभ के अपने दम पर उत्तर खोजने की कोशिश की। मुझे यकीन है कि इसे पूरा करने का एक तरीका है; मुझे इसकी याद आ रही है।

अग्रिम में धन्यवाद।


1
वहाँ 2 फ़ोल्डरों को एक साथ बाँधने की क्षमता है: sudo mount --bind olddir newdirलेकिन यह संभवत : ठीक वैसा नहीं है जैसा आप ...
and.4.4

@ andrew.46 mount --bindदो अलग-अलग माउंट पॉइंट से फ़ोल्डर के एक सेट तक पहुंच की अनुमति देता है। ओपी एक आरोह बिंदु से दो सेट फ़ोल्डर का उपयोग करना चाहता है
एडिएड

@ एडिड: उफ़, आप बिल्कुल सही हैं ... शोर के लिए खेद है ...
and.4.4

मैं एक तरह से सोच सकता था, लेकिन इसके लिए एक छोटी पृष्ठभूमि की स्क्रिप्ट की आवश्यकता होगी। क्या यह स्वीकार्य होगा?
जैकब व्लिजम

@JacobVlijm कृपया मुझे यह न बताएं कि क्या स्क्रिप्ट किसी भी फाइल को डायरेक्टरी पर उपलब्ध है और बाद में दो डेस्टिनेशन पर कॉपी
करेगी या नहीं

जवाबों:


8

स्क्रिप्टेड समाधान

1. स्वचालित रूप से अद्यतन पुस्तकालय दृश्य

नीचे पृष्ठभूमि स्क्रिप्ट के साथ, आप एक निर्देशिका सेट कर सकते हैं, वस्तुतः अन्य फ़ोल्डरों की मनमानी संख्या की संयुक्त सामग्री दिखा सकते हैं।

फ़ोल्डर की सामग्री (सिमिलिंक का मौजूदा) गतिशील रूप से (संयुक्त) स्रोतों के साथ सिंक्रनाइज़ है।

यह काम किस प्रकार करता है

स्क्रिप्ट समय-समय पर "लाइब्रेरी" -व्यू के लिए स्रोत फ़ोल्डर की सामग्री और साथ ही लक्षित फ़ोल्डर को सूचीबद्ध करती है।

  • यदि किसी भी स्रोत फ़ोल्डर में आइटम हैं, तो लाइब्रेरी में मौजूद नहीं है, लाइब्रेरी में एक सिमलिंक बनाया जाएगा।
  • यदि लाइब्रेरी में आइटम हैं, तो किसी भी स्रोत फ़ोल्डर में मौजूद नहीं है (वास्तव में एक टूटी हुई लिंक), आइटम को लाइब्रेरी से निकाल दिया जाता है

यहां छवि विवरण दर्ज करें

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

स्क्रिप्ट और कैसे उपयोग करना है

#!/usr/bin/env python3
import os
import sys
import time

# --- set loop time below (or leave it as it is)
loop = 5
# ---
# don't change anything below

target = sys.argv[1]
sources = sys.argv[2:]

while True:
    currlinks = os.listdir(target)
    compare = []
    for dr in sources:
        for f in os.listdir(dr):
            compare.append(f)
            if not f in currlinks:
                # create link
                os.symlink(dr+"/"+f, target+"/"+f)
    # clean up possible broken links
    for link in currlinks:
        if not link in compare:
            os.remove(target+"/"+link)
    # loop time
    time.sleep(loop)
  1. स्क्रिप्ट को एक खाली फ़ाइल में कॉपी करें, इसे इस रूप में सहेजें library_view.py
  2. टेस्ट- लक्षित निर्देशिका के साथ स्क्रिप्ट को चलाएं , संयुक्त निर्देशिका को पहले तर्क के रूप में देखने के लिए , अगली निर्देशिका के रूप में स्रोत निर्देशिकाओं को, जैसे:

    python3 /path/to/library_view.py /path/to/virtual_library /path/to/source1 /path/to/source2
    

    यह कमांड फ़ोल्डर्स की सामग्री को दिखाएगा source1और source2अंदर virtual_library

  3. यदि सभी ठीक काम करते हैं, तो इसे स्टार्टअप एप्लिकेशन में जोड़ें: डैश> स्टार्टअप एप्लिकेशन> जोड़ें। कमांड जोड़ें:

    python3 /path/to/library_view.py /path/to/virtual_library /path/to/source1 /path/to/source2
    

ध्यान दें

जैसा कि उल्लेख किया गया है, यदि आप चाहें तो आप दो से अधिक सॉरे निर्देशिकाओं को जोड़ सकते हैं।

2. मैनुअल संस्करण

यदि आप किसी कारण से पृष्ठभूमि स्क्रिप्ट का उपयोग नहीं करना पसंद करते हैं, तो आप लाइब्रेरी स्क्रिप्ट को मैन्युअल रूप से अपडेट (सिंक्रनाइज़ कर सकते हैं), शॉर्टकट कुंजी के तहत एक ही कमांड के साथ, नीचे दी गई स्क्रिप्ट का उपयोग कर सकते हैं:

#!/usr/bin/env python3
import os
import sys

target = sys.argv[1]
sources = sys.argv[2:]

currlinks = os.listdir(target)
compare = []
for dr in sources:
    for f in os.listdir(dr):
        compare.append(f)
        if not f in currlinks:
            # create link
            os.symlink(dr+"/"+f, target+"/"+f)
# clean up possible broken links
for link in currlinks:
    if not link in compare:
        os.remove(target+"/"+link)

चुनें: सिस्टम सेटिंग्स> "कीबोर्ड"> "शॉर्टकट"> "कस्टम शॉर्टकट"। "+" पर क्लिक करें और कमांड यो को अपनी पसंद का एक महत्वपूर्ण संयोजन जोड़ें:

python3 /path/to/library_view.py /path/to/virtual_library /path/to/source1 /path/to/source2

जैकब, मुझे वास्तव में बाहर जाने और मेरे लिए एक स्क्रिप्ट लिखने के लिए धन्यवाद देना होगा। अब मुझे इसका उपयोग करना है, आपने काम किया है। :-)। मैं इसे सप्ताहांत में एक शॉट दूँगा। बहुत धन्यवाद।
DanTheManDRH

1
@DanHutter धन्यवाद! आशा है, आपको पसंद आयेगी। अगर कुछ है, तो कृपया मुझे बताएं।
जैकब व्लिजम

हाय जैकब, मैं सिर्फ Ubuntu ग्नोम 16.10 में अपग्रेड किया गया है। यह स्क्रिप्ट अभी भी पूरी तरह से काम करती है। वर्तमान में इसका उपयोग संगीत, फ़ोटो और दस्तावेज़ों के लिए किया जा रहा है! फिर से धन्यवाद।
DanTheManDRH

@DHHutter उल्लेख करने के लिए धन्यवाद, यह सुनने के लिए बहुत अच्छा है!
जैकब वल्जिम

3

आप इसके लिए इंस्टॉल कर सकते हैं unionfs-fuse:

sudo apt-get install unionfs-fuse 

बढ़ते:

unionfs-fuse /folder1=RW:/folder2=RW /mount/point

यह folder1 और folder2 (या यदि आप चाहें तो) से सभी सामग्री को आपके आरोह बिंदु पर समूहित करेगा

Umounting:

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