Rendi Cartella un collegamento simbolico a due cartelle?


10

Vorrei che la cartella musicale predefinita di Ubuntu /home/$USER/Musicfunzionasse più o meno come farebbe una libreria in Windows. Essenzialmente sarebbe una cartella virtuale contenente il contenuto di altre cartelle.

La mia logica è che Rhythm Box guarderà solo una cartella per la nuova musica. Tutta la mia musica risiede in due cartelle /home/$USER/Dropbox/Musice /home/$USER/Dropbox/New Music.

Ciò si rivela utile anche per mostrare il contenuto di altre cartelle Dropbox nelle cartelle predefinite di Ubuntu (Documenti, Immagini, ecc.).

Ho cercato e ho cercato di trovare la risposta da solo senza risultati. Sono sicuro che c'è un modo per raggiungere questo obiettivo; Mi manca solo.

Grazie in anticipo.


1
C'è la possibilità di associare 2 cartelle insieme: sudo mount --bind olddir newdirma questo probabilmente non è esattamente quello che stai
cercando

@ andrew.46 mount --bindconsente l'accesso a un set di cartelle da due diversi punti di montaggio. OP vuole accedere a due set di cartelle da un punto di montaggio
EdiD

@Edid: Oops, ovviamente hai perfettamente ragione ... scusa per il rumore ...
andrew.46

Potrei pensare a un modo, ma richiederebbe un piccolo script di sottofondo. Sarebbe accettabile?
Jacob Vlijm,

@JacobVlijm Per favore, non dirmi che lo script verificherà se sono disponibili file nella directory e che in seguito
verranno

Risposte:


8

Soluzione (i) con script

1. Vista libreria aggiornata automaticamente

Con lo script in background di seguito, puoi impostare una directory, che mostra virtualmente il contenuto combinato di un numero arbitrario di altre cartelle.

Il contenuto della cartella (esistente di collegamenti simbolici) è sincronizzato dinamicamente con le fonti (combinate).

Come funziona

Lo script elenca periodicamente il contenuto delle cartelle di origine e la cartella di destinazione per la vista "libreria".

  • Se ci sono elementi in una delle cartelle di origine, non esistenti nella libreria, nella libreria verrà creato un collegamento simbolico.
  • se ci sono elementi nella libreria, non esistenti in nessuna delle cartelle di origine (in realtà un collegamento interrotto), l'elemento viene rimosso dalla libreria.

inserisci qui la descrizione dell'immagine

Il confronto delle liste è estremamente leggero (a livello di programmazione) e con poche risorse. Ho testato lo script con un ciclo molto più veloce rispetto allo script seguente, con un numero di elementi di circa 500 in un singolo livello di directory, senza alcun carico aggiuntivo (evidente).

Lo script e come usare

#!/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. Copia lo script in un file vuoto, salvalo come library_view.py
  2. Prova- esegui lo script con la directory target , per visualizzare le directory combinate, come primo argomento , nelle directory di origine come argomenti successivi, ad esempio:

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

    Questo comando mostrerà il contenuto delle cartelle source1e source2in virtual_library.

  3. Se tutto funziona correttamente, aggiungilo alle applicazioni di avvio: Dash> Applicazioni di avvio> Aggiungi. Aggiungi il comando:

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

Nota

Come accennato, puoi aggiungere più di due directory soure, se lo desideri.

2. Versione manuale

Se preferisci non utilizzare uno script in background per qualche motivo, puoi aggiornare (sincronizzare) manualmente la cartella della libreria, con esattamente lo stesso comando sotto un tasto di scelta rapida, usando lo script seguente:

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

Scegli: Impostazioni di sistema> "Tastiera"> "Scorciatoie"> "Scorciatoie personalizzate". Fai clic su "+" e aggiungi il comando yo una combinazione di tasti a tua scelta:

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

Jacob, devo davvero ringraziarti per aver fatto tutto il possibile e aver scritto una sceneggiatura per me. Ora devo usarlo, hai fatto il lavoro. :-). Ci proverò nel weekend. Grazie molto.
DanTheManDRH,

1
@DanHutter Grazie! Spero ti piaccia. Se c'è qualcosa, per favore fatemi sapere.
Jacob Vlijm,

Ciao Jacob, ho appena aggiornato a Ubuntu Gnome 16.10 questo script funziona ancora perfettamente. Attualmente lo usi per musica, foto e documenti! Grazie ancora.
DanTheManDRH il

@DanHutter Grazie per averlo menzionato, è così bello sentirlo!
Jacob Vlijm,

3

È possibile installare unionfs-fuseper questo:

sudo apt-get install unionfs-fuse 

Montaggio:

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

Sarà gruppo tutti i contenuti da cartella1 e cartella2 (o più se si vuole) al punto di montaggio

Umounting:

sudo umount /mount/point
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.