既存のディレクトリにシンボリックリンクツリーを作成する

既存のディレクトリにシンボリックリンクツリーを作成する

すべての音楽は1TB USBドライブに保存されており、ラップ$HOME/Music/トップの1つに接続すると、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 アルバムへのシンボリックリンクは作成されません。おそらく、親ディレクトリが存在するからです。

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

sudo1つの欠点は、慎重なルールを使用して解決できるという必要性ですNOPASSWD


一方ジェイソンのブログ投稿、最新のカーネルのmountコマンドは、代わりにoverlayファイルシステムとして使用されるように変更され、overlayfs添付されていますworkdirカーネル文書それでは、次のようにコード化してください。

マウント時に、マウントオプション「lowerdir」と「upperdir」で指定された2つのディレクトリは、マージされたディレクトリに結合されます。

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

関連情報