web-dev-qa-db-ja.com

複数のディレクトリを1つにシンボリックリンクできますか?

これに対する答えはもうわかっている気がしますが、チェックしたいと思いました。

私はいくつかの異なるフォルダを持っています:

images_a/
images_b/
images_c/

この新しいディレクトリにこれらすべてのディレクトリの内容が含まれるように、ある種のシンボリックリンクを作成できますか?つまり、この新しい「images_all」には、images_aimages_b、およびimages_cのすべてのファイルが含まれますか?

25
nickf

いいえ。すべての個々のファイルをシンボリックリンクする必要があります。

could定期的に実行するジョブを作成し、基本的にimages_all内の既存のシンボリックリンクをすべて削除してから、他の3つのディレクトリからすべてのファイルのリンクを再作成します。しかし、それはちょっとしたごまかしで、次のようなものです。

rm -f images_all/*
for i in images_[abc]/* ; do; ln -s $i images_all/$(basename $i) ; done

このジョブの実行中に、ファイルが一時的に消えたように見える場合があることに注意してください。

また、1つのファイル名が2つ以上のディレクトリに存在する場合にも注意する必要があります。


しばらくしてこの質問に戻ってきましたが、ファイルが利用できない時間を最小限に抑えることができることも私には思い浮かびます。

それらをdifferentディレクトリにリンクする場合は、時間を最小限に抑える比較的高速なmv操作を実行します。何かのようなもの:

mkdir images_new
for i in images_[abc]/* ; do
    ln -s $i images_new/$(basename $i)
done

# These next two commands are the minimal-time switchover.
mv images_all images_old
mv images_new images_all

rm -rf images_old

私はそれをテストしていないので、それを実装する人は誰でも適合性を確認する必要があります。

12
paxdiablo

Unionfsのようなunioningファイルシステムを試すことができます!

http://www.filesystems.org/project-unionfs.html

http://aufs.sourceforge.net/

9

paxdiabloの素晴らしい答えに追加するには、cp-sを使用できると思います
(-sまたは--symbolic-link)は、リテラルコピーの代わりにシンボリックリンクを作成します

フォルダBとCのファイルの「マージ」フォルダAへのシンボリックリンクの一括追加を高速化または簡素化するためです。

(私はこれをテストしていませんが)

頭のてっぺんを思い出せませんが、CPが既存のものを上書きしないオプションがあると確信しているため、新しいファイルのシンボリックリンクのみが「cp-s」されます。

0
James Gaul