写真付きの別のディスクがあります。
/media/drive1/pictures/
/media/drive2/pictures/
/media/drive3/pictures/
/media/drive4/pictures/
# ...
というファイルがあります共有するシンボリックリンクがありますすべて各サブフォルダ絵各ドライブのディレクトリです。各サブフォルダを次のスクリプトにマージします。
# I do this for every drive
for item in "/media/drive1/pictures/"*
do
target=/media/share/pictures/`basename "$item"`
if [ ! -d "$target" ]; then
ln -s "$item" "$target"
chown -h lsc:lsc "$target"
fi
done
私はしばらくSambaとうまく共有してきました。
[global]
# ...
follow symlinks = yes
これは純粋なプライベートネットワークであり、共有は読み取り専用なので、セキュリティはあまり問題になりません。
### /etc/exports
/media/share *(ro,async)
共有をマウントすると、mount 1.2.3.4:/ foo
シンボリックリンクはlocalhostで追跡を試みます。
私の質問:シンボリックリンクでフォルダを共有する方法存在する共有マウントホスト?
メモ:bind bind
各サブフォルダが異なる場所/ディスクを指しているため、ここではソリューションは/etc/fstab
機能しません。/media/share/
ベストアンサー1
すべてのシンボリックリンクを比較的に作成できないのはなぜですか?それはすべてです。
NFSサーバー(1.2.3.4)に次のデバイスがインストールされているとします(物理ドライブが異なる場合があります)。
/media/drive1/pictures/
/media/drive2/pictures/
/media/drive3/pictures/
/media/drive4/pictures/
# ...
スクリプトのln行を次に変更します。
ln -s "$item" "$target"
読む
ln -s "../${item#/media/}" "$target"
これにより、次の形式のシンボリックリンクが生成されます。
../drive1/pictures/...
これがプライベートネットワークであり、セキュリティは問題にならないと述べたので、エクスポートを次のように設定できます。
### /etc/exports
/media *(ro,async)
その後、NFSがマウントされたクライアントシステムで
mkdir -p foo; mount 1.2.3.4:/media foo
fooには、共有、ドライブ1、ドライブ2、ドライブ3、ドライブ4などが表示されます。
したがって、実際にはクライアントにメディアディレクトリ全体がマウントされ、シンボリックリンクが相対的であるため、正常に機能します。必要な変更は非常に少なく、${item#/media/}
あなたのbashバージョンはこの構文をサポートまたはサポートしていない可能性があり、同等のコマンドであればすべて可能です(sedコマンド、awk、または/ media /を切り捨てるのに慣れているコマンドを使用できます)。 。
次のフォルダまたはファイルがある場合、残りの唯一の問題は一意の名前です。
/media/drive1/pictures/same_name1
/media/drive2/pictures/same_name1
現在のコード
if [ ! -d "$target" ]; then
ln -s "$item" "$target"
chown -h lsc:lsc "$target"
fi
最初のターゲットが見つかったら、シンボリックリンクの生成をスキップします。したがって、その名前がすでに別のドライブで使用されているため、純粋にシンボリックリンクが見つからないファイルがいくつかある可能性があります。
このような場合に一種の一意の識別子を追加するには、シンボリックリンク名を変更する必要があります。
if [ -d "$target" ]; then
#extract out the "drive1" part from $item and prepend it to target
target="$(echo item | sed -e 's!/media/\([^/]*\)/pictures.*!\1!g')_${target}"
fi
if [ ! -d "$target" ]; then
ln -s "$item" "$target"
chown -h lsc:lsc "$target"
fi