Jadikan Folder sebagai tautan simbolis ke dua folder?

10

Saya ingin memiliki folder musik default Ubuntu /home/$USER/Musicuntuk bertindak cukup banyak seperti perpustakaan di Windows. Pada dasarnya itu akan menjadi folder virtual yang berisi konten folder lain.

Alasan saya adalah Rhythm Box hanya akan menonton satu folder untuk musik baru. Semua musik saya berada di dua folder /home/$USER/Dropbox/Musicdan /home/$USER/Dropbox/New Music.

Ini juga terbukti bermanfaat untuk menampilkan konten folder Dropbox lainnya di folder default Ubuntu (Dokumen, Gambar, dll).

Saya melakukan pencarian dan mencoba menemukan jawabannya sendiri tetapi tidak berhasil. Saya yakin ada cara untuk mencapai ini; Saya hanya melewatkannya.

Terima kasih sebelumnya.

DanTheManDRH
sumber
1
Ada kemampuan untuk mengikat 2 folder bersama-sama dengan: sudo mount --bind olddir newdirtapi ini mungkin tidak persis apa yang Anda cari ...
andrew.46
@ andrew.46 mount --bindmemungkinkan akses ke satu set folder dari dua titik mount berbeda. OP ingin mengakses dua set folder dari satu titik mount
EdiD
@ Id: Aduh, tentu saja Anda benar-benar benar ... maaf untuk kebisingan ...
andrew.46
Saya bisa memikirkan cara, tetapi akan membutuhkan skrip latar belakang kecil. Apakah itu bisa diterima?
Jacob Vlijm
@JacobVlijm Tolong jangan bilang skrip akan memeriksa apakah ada file yang tersedia di direktori dan salin ke dua tujuan sesudahnya ..
heemayl

Jawaban:

8

Solusi tertulis

1. Tampilan perpustakaan diperbarui secara otomatis

Dengan skrip latar belakang di bawah ini, Anda dapat mengatur direktori, yang secara virtual menunjukkan konten gabungan dari sejumlah folder lain yang sewenang-wenang.

Konten folder (ada symlink) secara dinamis disinkronkan dengan sumber (gabungan).

Bagaimana itu bekerja

Skrip secara berkala mencantumkan konten folder sumber serta folder yang ditargetkan untuk tampilan "perpustakaan".

  • Jika ada item di salah satu folder sumber, tidak ada di perpustakaan, symlink akan dibuat di perpustakaan.
  • jika ada item di perpustakaan, tidak ada di folder sumber mana pun (sebenarnya tautan rusak), item tersebut dihapus dari perpustakaan.

masukkan deskripsi gambar di sini

Membandingkan daftar sangat ringan (terprogram) dan sumber daya yang rendah. Saya menguji skrip dengan loop yang lebih cepat daripada skrip di bawah ini, dengan sejumlah item sekitar 500 dalam satu level direktori, tanpa tambahan (yang terlihat) memuat apa pun.

Script dan cara menggunakannya

#!/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. Salin skrip ke file kosong, simpan sebagai library_view.py
  2. Tes-jalankan skrip dengan direktori yang ditargetkan , untuk melihat direktori gabungan di, sebagai argumen pertama , direktori sumber sebagai argumen berikutnya, misalnya:

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

    Perintah ini akan menampilkan konten folder source1dan source2in virtual_library.

  3. Jika semua berfungsi dengan baik, tambahkan ke aplikasi startup: Dash> Aplikasi Startup> Tambah. Tambahkan perintah:

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

Catatan

Seperti yang disebutkan, Anda dapat menambahkan lebih dari dua direktori soure jika Anda mau.

2. Versi manual

Jika Anda memilih untuk tidak menggunakan skrip latar belakang karena suatu alasan, Anda dapat memperbarui (menyinkronkan) folder pustaka secara manual, dengan perintah yang persis sama di bawah tombol pintas, menggunakan skrip di bawah ini:

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

Pilih: Pengaturan Sistem> "Keyboard"> "Pintasan"> "Pintasan Khusus". Klik "+" dan tambahkan perintah untuk kombinasi tombol pilihan Anda:

python3 /path/to/library_view.py /path/to/virtual_library /path/to/source1 /path/to/source2
Yakub Vlijm
sumber
Yakub, aku benar-benar harus berterima kasih padamu untuk semua dan menulis naskah untukku. Sekarang saya harus menggunakannya, Anda berhasil. :-). Saya akan mencoba ini selama akhir pekan. Terimakasih banyak.
DanTheManDRH
1
@DanHutter Terima kasih! Semoga Anda menyukainya. Jika ada sesuatu, tolong beri tahu saya.
Jacob Vlijm
Halo Jacob, saya baru saja meningkatkan ke Ubuntu Gnome 16.10 skrip ini masih berfungsi dengan baik. Saat ini menggunakannya untuk Musik, Foto, dan Dokumen! Terima kasih lagi.
DanTheManDRH
@DanHutter Terima kasih telah menyebutkan, itu sangat bagus untuk didengar!
Jacob Vlijm
3

Anda dapat menginstal unionfs-fuseuntuk ini:

sudo apt-get install unionfs-fuse 

Pemasangan:

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

Ini akan mengelompokkan semua konten dari folder1 dan folder2 (atau lebih jika Anda mau) ke titik mount Anda

Jumlah:

sudo umount /mount/point
Edid
sumber