web-dev-qa-db-ja.com

フォルダ全体の再帰的なハードリンクを作成する

まず、フォルダのハードリンクを作成できないことを知っています。

宛先に後続のフォルダーツリーを自動的に(そして再帰的に)作成し、すべてのファイルをソースから宛先に自動的にハードリンクできるコマンド(linux)があるかどうか疑問に思いました。

1
RazorHail

「その後、すべてのファイルをソースから宛先に自動的にハードリンクする」とはどういう意味かわかりません。そして、明示的に再帰が必要です。

2つの場所を「同期」させたままにする場合は、たとえばファイルの削除または作成は、両方で同時に観察する必要があります。その後、バインドのマウント( この他の回答 )が適切です。このソリューションでは、ファイルシステムに痕跡が残らないことに注意してください。ハードリンクを作成すると、ファイルシステムに作成されます。ディスクを移動し、ファイルシステムを別のOSにマウントしても、ハードリンクはまだそこにあります。再起動しても、ハードリンクはまだあります。バインドマウントはOSレベルです。ディスクを移動してマウントした後、マウントをバインドするように他のOSに個別に命令する必要があるだけではありません。ディスクを移動しない場合でも、再起動後に現在のOSにマウントをバインドするように指示する必要があります(永続的な解決策が必要な場合) )。

ディレクトリへのシンボリックリンクは多少似ており、ファイルシステムに存在します。

ln -s /original /other

シンボリックリンクとそのターゲットが同じファイルシステムに属し、シンボリックリンクが relative の場合、ファイルシステムが別の場所(異なるマウントポイント、場合によっては異なるOS)にマウントされても機能します。シンボリックリンクが希望どおりにならない理由があります( )。

バインドのマウントまたはシンボリックリンクは実際には再帰的ではないことに注意してください。 2つのパスを「リンク」するのはsingleの行為です。それはより深い道には何もしません。それらの(半)同等性は、それぞれの((((…)great-)great-)grand)親「ディレクトリ」間に何らかのリンクがあるために発生します。

ここで、「ソースから宛先にすべてのファイルを自動的にハードリンクする」とは、「これを自動的に1回だけ行う」ことを意味する場合、cpを使用してこれを行うことができます。

cp -lR /original /other

(ただし、-lはPOSIXでは必要ありません)。 cp -Rに似ていますが、ハードリンクがあります。これは本当に再帰的です。しかし、それは1回限りのアクションでもあります。ディレクトリサブツリーは個別であり、ファイルのみがハードリンクされています。ファイルの作成または削除はミラーリングされません。 ハードリンクを切断するアクション ハードリンクを切断します。

0

バインドマウント がより良い解決策でしょうか?それはあなたが望むことを正確に行います。つまり、すべてのファイルを2つの異なるパスで再帰的に同じにすることです。

このコマンドにより、/otherの内容は既存のマウントまたはディレクトリ/originalと同じになります。

mount --bind /original /other

/originalまたは/otherのいずれかで行った変更は、2つのパスが同じマウントへのポインターになっているため、もう一方にすぐに表示されます。

2
Deltik