기존 디렉토리에 심볼릭 링크 트리 생성

기존 디렉토리에 심볼릭 링크 트리 생성

모든 음악은 1TB USB 드라이브에 저장되어 있으며 $HOME/Music/이를 랩톱 중 하나에 연결하면 udev 규칙을 통해 심볼릭 링크됩니다.

내가 겪고 있는 문제는 이것이 디렉토리가 있는 곳에서 잘 작동한다는 것입니다.아니요랩톱에 존재하지만 랩톱에 동일한 이름을 가진 기존 디렉터리(Artist/Album/*.flac)가 있는 필요한 트리를 생성하지 않습니다.

현재 실행중인 스크립트는 다음과 같습니다.

#!/usr/bin/env bash
# repopulate music links when drive plugged in

shopt -s nullglob
export DISPLAY=:0
export XAUTHORITY=/home/jason/.Xauthority

music=(/media/Apollo/Music/*)

find /home/jason/Music -type l -exec rm {} \;
for dirs in "${music[@]}"; do
  ln -s "$dirs" /home/jason/Music/ 2>/dev/null
done
status1=$?

mpc update &>/dev/null

status2=$?
if [[ "$status1" -eq 0 && "$status2" -eq 0 ]]; then
  printf "%s\n" "Music directory updated" | dzen2 -p 3
fi

디렉토리가 노트북과 USB 드라이브 모두에 ​​존재하지만 내용이 약간 다르고 파일 심볼릭 링크가 올바른지 어떻게 확인할 수 있습니까? 예를 들어:

USB 드라이브:

음악 -- Matthew Shipp -- 목가적인 평온 -- 트랙 1
                                            -- 트랙 2 등...
                       -- 포메이션 -- 트랙 1
                                            -- 트랙 2 등...
                       --균형--트랙 1
                                            -- 트랙 2 등...

랩탑:

음악 -- Matthew Shipp -- 목가적인 평온 -- 트랙 1
                                            -- 트랙 2 등...

이 경우 Strata 또는 Equilibrium 앨범에 대한 심볼릭 링크가 생성되지 않습니다. 아마도 상위 디렉터리(Matthew Shipp)가 존재하기 때문일 것입니다.

rsync내 노트북에는 공간이 제한되어 있고 심볼릭 링크를 따라갈 수 있으므로 실제 데이터를 복사하는 데 사용하고 싶지 않습니다 mpd. 파일을 복사할 필요가 없습니다.

내 노트북의 기존 디렉토리에 심볼릭 링크를 전파하도록 스크립트를 조정할 수 있습니까?

답변1

귀하의 주요 목표는 로컬 및 외부 음악 폴더를 통합하여 보는 것이기 때문에 공동 설치가 필요하다고 생각합니다.통과하다overlayfs특히 파일이 기록되지 않은 경우 사용할 수 있습니다.

이전 커널 버전(<3.18)에서 기본 명령은 다음과 같습니다.

mount -t overlayfs -o lowerdir=/read/only/directory,upperdir=/writeable/directory overlayfs /mount/point

예를 들어:

$ ls Documents
374620-63301.pdf        My Kindle Content   scan0005.jpg
BPMN2_0_Poster_EN.pdf   scan0003.jpg        StrongDC++
$ ls devel
cse           ossec     ubuntu-14.04-desktop-amd64-ssh.iso
nexus         scripts   zsh-syntax-highlighting
$ sudo mount -t overlayfs -o lowerdir=$PWD/Documents,upperdir=$PWD/devel overlayfs ~/Documents
$ ls Documents
374620-63301.pdf        scan0003.jpg           
BPMN2_0_Poster_EN.pdf   scan0005.jpg    
cse                     scripts
My Kindle Content       StrongDC++
nexus                   ubuntu-14.04-desktop-amd64-ssh.iso
ossec                   zsh-syntax-highlighting

sudo한 가지 단점은 신중한 규칙을 사용하여 해결될 수 있다는 필요성입니다 NOPASSWD.


반면제이슨의 블로그 게시물, 최신 커널의 mount 명령은 overlay대신 파일 시스템 으로 사용되도록 변경되고 overlayfs첨부된 workdir.커널 문서이제 다음과 같이 코드화하세요.

마운트할 때 마운트 옵션 "lowerdir" 및 "upperdir"로 지정된 두 디렉터리는 병합된 디렉터리로 결합됩니다.

mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,\
  workdir=/work /merged

"workdir"은 upperdir과 동일한 파일 시스템의 빈 디렉터리여야 합니다.

답변2

당신은 또한 사용할 수 있습니다누우 스토우, 심볼릭 링크 팜 관리자.

다음 레이아웃을 가정합니다.

.
├── drive
│   ├── a
│   │   ├── b
│   │   │   └── bar
│   │   └── c
│   │       └── baz
│   └── b
└── music
    └── a
        └── b
            └── foo

구현하다:$ stow --target music --dir drive .

결과:

.
├── drive
│   ├── a
│   │   ├── b
│   │   │   └── bar
│   │   └── c
│   │       └── baz
│   └── b
└── music
    ├── a
    │   ├── b
    │   │   ├── bar -> ../../../drive/a/b/bar
    │   │   └── foo
    │   └── c -> ../../drive/a/c
    └── b -> ../drive/b

답변3

또 다른 옵션은 Xorg를 사용하는 것입니다 lndir.

lndir source target

알아채다소스는 다음과 같아야 합니다.목표에 비해. music다음과 같은 디렉토리 에 있는 경우 drive다음을 의미합니다.

lndir ../drive music

왜냐하면 당신이 위치해 있다면 drive.../drivemusic

관련 정보