Tornar a pasta um link simbólico para duas pastas?

9

Eu gostaria de ter a pasta de música padrão do Ubuntu /home/$USER/Music para agir como uma biblioteca faria no Windows. Essencialmente, seria uma pasta virtual contendo o conteúdo de outras pastas.

Meu raciocínio é que o Rhythm Box assistirá apenas uma pasta para novas músicas. Toda a minha música reside em duas pastas /home/$USER/Dropbox/Music e /home/$USER/Dropbox/New Music .

Isso também é útil para mostrar o conteúdo de outras pastas do Dropbox nas pastas padrão do Ubuntu (Documentos, Imagens, etc.).

Eu pesquisei e tentei encontrar a resposta sozinho, sem sucesso. Tenho certeza de que há uma maneira de conseguir isso; Eu só estou perdendo isso.

Obrigado antecipadamente.

    
por DanTheManDRH 03.05.2016 / 09:08

2 respostas

6

Solução (s) com script

1. Visualização da biblioteca atualizada automaticamente

Com o script de plano de fundo abaixo, você pode configurar um diretório, virtualmente mostrando o conteúdo combinado de um número arbitrário de outras pastas.

O conteúdo da pasta (existente de links simbólicos) é dinamicamente sincronizado com as fontes (combinadas).

Como funciona

O script lista periodicamente o conteúdo das pastas de origem, bem como a pasta de destino para a visualização "biblioteca".

  • Se houver itens em qualquer uma das pastas de origem, não existentes na biblioteca, um link simbólico será criado na biblioteca.
  • se houver itens na biblioteca, não existentes em qualquer uma das pastas de origem (na verdade, um link corrompido), o item será removido da biblioteca.

Acomparaçãodelistaséextremamenteleve(programaticamente)ecompoucosrecursos.Eutesteioscriptcomumloopmuitomaisrápidodoqueoscriptabaixo,comumnúmerodeitensdecercade500emumúniconíveldediretório,semnenhumacargaadicional(perceptível).

Oscriptecomousar

#!/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. Copie o script em um arquivo vazio, salve-o como library_view.py
  2. Teste - execute o script com o diretório direcionado , para visualizar os diretórios combinados em, como primeiro argumento , os diretórios de origem como próximos argumentos, por exemplo:

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

    Este comando mostrará o conteúdo das pastas source1 e source2 in virtual_library .

  3. Se tudo funcionar bem, adicione-o aos aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicionar. Adicione o comando:

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

Nota

Como mencionado, você pode adicionar mais de dois diretórios soure, se quiser.

2. Versão manual

Se você preferir não usar um script de segundo plano por algum motivo, poderá atualizar manualmente (sincronizar) a pasta da biblioteca, com exatamente o mesmo comando em uma tecla de atalho, usando o script abaixo:

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

Escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando yo uma combinação de teclas à sua escolha:

python3 /path/to/library_view.py /path/to/virtual_library /path/to/source1 /path/to/source2
    
por Jacob Vlijm 03.05.2016 / 21:11
3

Você pode instalar unionfs-fuse para isso:

sudo apt-get install unionfs-fuse 

Montagem:

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

Agrupará todo o conteúdo de folder1 e folder2 (ou mais se você quiser) ao seu ponto de montagem

Implantação:

sudo umount /mount/point
    
por EdiD 03.05.2016 / 10:08