폴더를 두 폴더에 대한 심볼릭 링크로 만드시겠습니까?


10

우분투의 기본 음악 폴더 /home/$USER/Music가 Windows의 라이브러리처럼 작동하도록하고 싶습니다 . 기본적으로 다른 폴더의 내용이 들어있는 가상 폴더입니다.

내 근거는 리듬 박스는 새로운 음악에 대한 하나의 폴더 만 볼 것입니다. 내 음악은 모두 두 개의 폴더 /home/$USER/Dropbox/Music/home/$USER/Dropbox/New Music있습니다.

이것은 우분투의 기본 폴더 (문서, 그림 등)에 다른 Dropbox 폴더의 내용을 보여주는 데 유용합니다.

나는 검색하고 아무 소용없이 스스로 답을 찾으려고 노력했다. 나는 이것을 달성 할 수있는 방법이 있다고 확신한다. 방금 놓 쳤어요.

미리 감사드립니다.


1
2 개의 폴더를 함께 묶을 수있는 기능이 있습니다 : sudo mount --bind olddir newdir그러나 이것은 아마도 당신이
추구

@ andrew.46을 mount --bind사용하면 두 개의 다른 마운트 지점에서 하나의 폴더 세트에 액세스 할 수 있습니다. OP는 하나의 마운트 지점에서 두 개의 폴더 세트에 액세스하려고합니다
EdiD

@Edid : 죄송합니다. 물론 완벽합니다 ... 소음에 대해 죄송합니다 ...
andrew.46

나는 방법을 생각할 수 있지만 작은 배경 스크립트가 필요합니다. 괜찮을까요?
Jacob Vlijm

@JacobVlijm 스크립트가 디렉토리에서 사용 가능한 파일이 있는지 확인한 후 두 대상으로 복사한다고
알려주지 마십시오

답변:


8

스크립트 솔루션

1. 자동 업데이트 라이브러리 뷰

아래의 백그라운드 스크립트를 사용하면 임의의 수의 다른 폴더의 결합 된 내용을 실제로 표시하는 디렉토리를 설정할 수 있습니다.

폴더의 내용 (기존의 심볼릭 링크)은 (결합 된) 소스와 동적으로 동기화됩니다.

작동 원리

스크립트는 "라이브러리"-view의 대상 폴더뿐만 아니라 소스 폴더의 내용을 주기적으로 나열합니다.

  • 라이브러리에 없는 소스 폴더에 항목이 있으면 라이브러리에 심볼릭 링크가 생성됩니다.
  • 소스 폴더에 존재 하지 않는 라이브러리에 항목이있는 경우 (실제로는 끊어진 링크) 해당 항목이 라이브러리에서 제거됩니다 .

여기에 이미지 설명을 입력하십시오

목록을 비교하는 것은 프로그래밍 방식으로 매우 가볍고 리소스가 적습니다. 아래 디렉토리에서 훨씬 빠른 루프로 스크립트를 테스트했으며 단일 디렉토리 레벨에서 약 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
    

    이 명령은 폴더의 내용이 표시됩니다 source1source2의를 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 감사합니다! 당신이 그것을 좋아 바랍니다. 무엇이든 있으면 알려주세요.
Jacob Vlijm

안녕하세요 Jacob, 방금 Ubuntu Gnome 16.10으로 업그레이드했습니다.이 스크립트는 여전히 완벽하게 작동합니다. 현재 음악, 사진 및 문서에 사용하고 있습니다! 다시 감사합니다.
DanTheManDRH

@DanHutter 언급 해 주셔서 감사합니다. 들어 주셔서 감사합니다!
Jacob Vlijm

3

unionfs-fuse이를 위해 설치할 수 있습니다 .

sudo apt-get install unionfs-fuse 

설치:

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

folder1folder2 (또는 원하는 경우 이상)의 모든 컨텐츠를 마운트 지점으로 그룹화합니다.

장착 :

sudo umount /mount/point
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.