Klasör iki klasöre sembolik bir bağlantı oluştursun mu?


10

Ubuntu'nun varsayılan müzik klasörünün /home/$USER/MusicWindows'taki bir kütüphane gibi davranmasını istiyorum. Esasen, diğer klasörlerin içeriğini içeren sanal bir klasör olacaktır.

Benim mantığım Ritim Kutusu yeni müzik için sadece bir klasör izleyecektir. Tüm müziklerim iki klasörde /home/$USER/Dropbox/Musicve /home/$USER/Dropbox/New Music.

Bu ayrıca Ubuntu'nun varsayılan klasörlerindeki (Belgeler, Resimler vb.) Diğer Dropbox klasörlerinin içeriğini göstermek için de yararlıdır.

Arama yaptım ve cevabı kendi başıma bulmaya çalıştım. Eminim bunu başarmanın bir yolu vardır; Sadece özlüyorum.

Şimdiden teşekkürler.


1
Birlikte 2 klasör bağlamak için yeteneği var: sudo mount --bind olddir newdirama bu muhtemelen tam olarak ne sonra değil ...
andrew.46

@ andrew.46 mount --bind, iki farklı bağlama noktasından bir klasör kümesine erişim sağlar. OP, bir montaj noktasından iki klasör kümesine erişmek istiyor
EdiD

@Edid: Hata! Tabii ki kesinlikle
haklısın

Bir yol düşünebilirdim, ama küçük bir arka plan komut dosyası gerektirir. Bu kabul edilebilir mi?
Jacob Vlijm

@JacobVlijm Lütfen betiğin dizinde herhangi bir dosya olup olmadığını kontrol edip daha sonra iki hedefe kopyalanacağını
söyleme

Yanıtlar:


8

Kodlanmış çözüm (ler)

1. Otomatik olarak güncellenen kütüphane görünümü

Aşağıdaki arka plan komut dosyasıyla, rasgele sayıda başka klasörün birleşik içeriğini sanal olarak gösteren bir dizin ayarlayabilirsiniz.

Klasörün içeriği (sembolik bağlantılar mevcut) dinamik olarak (birleşik) kaynaklarla senkronize edilir.

Nasıl çalışır

Komut dosyası, kaynak klasörlerin içeriğini ve "kütüphane" görünümü için hedeflenen klasörü düzenli olarak listeler.

  • Kaynak klasörlerin herhangi öğeler varsa değil kütüphanede mevcut, bir sembolik kütüphanesinde oluşturulacaktır.
  • kütüphanede öğeler, varsa değil kaynak klasörler (aslında bir kırık link) hiçbirinde mevcut, öğe olduğunu kaldırıldı kitaplıktan.

resim açıklamasını buraya girin

Listeleri karşılaştırmak son derece hafiftir (programlı olarak) ve kaynakları azdır. Komut dosyasını çok daha hızlı bir döngü ile daha sonra aşağıdaki komut dosyasında, hiçbir ek (fark edilir) yük olmadan tek bir dizin düzeyinde yaklaşık 500 öğeyle test ettim.

Senaryo ve nasıl kullanılır

#!/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. Komut dosyasını boş bir dosyaya kopyalayın, library_view.py
  2. İlk bağımsız değişken olarak kaynak dizinlerdeki birleşik dizinleri sonraki bağımsız değişkenler olarak görüntülemek için komut dosyasını hedeflenen dizinde sınayın, örneğin:

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

    Bu komut, source1ve source2içindeki klasörlerin içeriğini gösterir virtual_library.

  3. Her şey yolunda giderse, uygulamayı başlangıç ​​uygulamalarına ekleyin: Çizgi> Başlangıç ​​Uygulamaları> Ekle. Komutu ekleyin:

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

Not

Belirtildiği gibi, isterseniz ikiden fazla soure dizini ekleyebilirsiniz.

2. Manuel sürüm

Herhangi bir nedenle arka plan komut dosyası kullanmamayı tercih ederseniz, aşağıdaki komut dosyasını kullanarak bir kısayol tuşu altında tam olarak aynı komutla kütüphane klasörünü manuel olarak güncelleyebilir (senkronize edebilirsiniz):

#!/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)

Seçin: Sistem Ayarları> "Klavye"> "Kısayollar"> "Özel Kısayollar". "+" İşaretini tıklayın ve yo komutunu istediğiniz bir tuş kombinasyonuna ekleyin:

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

Jacob, dışarı çıkıp benim için senaryo yazdığın için sana gerçekten teşekkür etmeliyim. Şimdi kullanmak zorundayım, işi sen yaptın. :-). Bunu haftasonu boyunca deneyeceğim. Çok teşekkürler.
DanTheManDRH

1
@DanHutter Teşekkürler! Umarım beğenirsin. Bir şey varsa, lütfen bana bildirin.
Jacob Vlijm

Merhaba Jacob, Ubuntu Gnome 16.10 sürümüne geçtim, bu script hala mükemmel çalışıyor. Şu anda Müzik, Fotoğraflar ve Belgeler için kullanıyor! Tekrar teşekkürler.
DanTheManDRH

@DanHutter Bahsettiğiniz için teşekkürler, bunu duymak çok güzel!
Jacob Vlijm

3

Bunun için yükleyebilirsiniz unionfs-fuse:

sudo apt-get install unionfs-fuse 

Montaj:

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

Klasör1 ve klasör2'den (veya isterseniz daha fazlasından) tüm içeriği bağlama noktanıza gruplayacaktır .

bağladığınızda veya çözdüğünüzde:

sudo umount /mount/point
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.