태그 보관물: symbolic-link

symbolic-link

폴더를 두 폴더에 대한 심볼릭 링크로 만드시겠습니까? 폴더 만 볼 것입니다. 내 음악은

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

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

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

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

미리 감사드립니다.



답변

스크립트 솔루션

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

답변

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

sudo apt-get install unionfs-fuse

설치:

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

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

장착 :

sudo umount /mount/point

답변