フォルダを2つのフォルダへのシンボリックリンクにしますか?


10

Ubuntuのデフォルトの音楽フォルダー/home/$USER/MusicをWindowsのライブラリとほぼ同じように動作させたいのですが。基本的には、他のフォルダーの内容を含む仮想フォルダーになります。

私の理論的根拠は、Rhythm Boxが新しい音楽のフォルダーを1つだけ監視することです。私のすべての音楽は2つのフォルダ/home/$USER/Dropbox/Musicとにあり/home/$USER/Dropbox/New Musicます。

これは、Ubuntuのデフォルトフォルダー(ドキュメント、画像など)にある他のDropboxフォルダーの内容を表示する場合にも役立ちます。

私は検索を行い、自分で答えを見つけ出そうとしたが、役に立たなかった。私はこれを達成する方法があると確信しています。私はそれを逃しています。

前もって感謝します。


1
:そこと一緒に2つのフォルダを結合する能力があるsudo mount --bind olddir newdirが、これはあなたが後にしているまさにおそらくではありません...
andrew.46

@ andrew.46をmount --bind使用すると、2つの異なるマウントポイントから1セットのフォルダーにアクセスできます。OPが1つのマウントポイントから2セットのフォルダーにアクセスしたい
EdiD 2016年

@Edid:おっと、あなたは...もちろん完全に正しいのノイズのために申し訳ありません...
andrew.46

私は方法を考えることができましたが、それは小さな背景スクリプトを必要とするでしょう。それは受け入れられますか?
Jacob Vlijm 2016年

@JacobVlijm ..スクリプトは任意のファイルがディレクトリで提供されているかどうかを確認し、その後2つの宛先にコピーされます私に教えないでください
heemayl

回答:


8

スクリプトによる解決策

1.自動的に更新されるライブラリビュー

以下のバックグラウンドスクリプトを使用すると、ディレクトリを設定して、任意の数の他のフォルダーのコンテンツの組み合わせを仮想的に表示できます。

フォルダーのコンテンツ(シンボリックリンクの存在)は、(結合された)ソースと動的に同期されます。

使い方

このスクリプトは、定期的にソースフォルダーのコンテンツと「ライブラリ」ビューのターゲットフォルダーを一覧表示します。

  • ライブラリに存在せず、いずれかのソースフォルダーにアイテムがある場合、シンボリックリンクがライブラリに作成されます。
  • アイテムがライブラリ内に存在する場合、いないソースフォルダ(実際には壊れたリンク)のいずれかに存在、項目がされて削除ライブラリから。

ここに画像の説明を入力してください

リストを比較すると、(プログラム的に)非常に軽量で、リソースが少なくなります。以下のスクリプトよりもはるかに高速なループでスクリプトをテストしました。単一のディレクトリレベルに約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
    

    このコマンドは、フォルダの内容が表示されますsource1し、source2中にvirtual_library

  3. すべて正常に動作する場合は、それをスタートアップアプリケーションに追加します。[ダッシュ]> [スタートアップアプリケーション]> [追加]。次のコマンドを追加します。

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

注意

前述のように、必要に応じて2つ以上のsoureディレクトリを追加できます。

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 2016年

1
@DanHutterありがとう!あなたがそれを好きになることを願っています。何かありましたらお知らせください。
Jacob Vlijm 2016年

こんにちはジェイコブ、Ubuntu Gnome 16.10にアップグレードしました。このスクリプトはまだ完全に動作します。現在、音楽、写真、ドキュメントに使用しています。ありがとうございました。
DanTheManDRH 2016

@DanHutter言及していただきありがとうございます。
Jacob Vlijm 2016

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.