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

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

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

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

答え1

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

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

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

ln -s /original /other

シンボリックリンクとそのターゲットが同じファイルシステムに属しており、シンボリックリンクが相対的、ファイルシステムが他の場所にマウントされていても(異なるマウントポイント、おそらく異なるOS)動作します。シンボリックリンクが望ましくない理由がいくつかあります()。

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

ここで、「ソースから宛先にすべてのファイルを自動的にハードリンクする」が「これを一度だけ自動的に実行する」という意味である場合は、次のように実行できますcp

cp -lR /original /other

(-lただし、POSIX では必須ではありません)。 に似ていますcp -Rが、ハードリンクを使用します。 これは実際には再帰的です。 ただし、これは 1 回限りのアクションでもあります。 ディレクトリ サブツリーは別々であり、通常のファイルのみがハードリンクされます。 ファイルの作成または削除はミラーリングされません。ハードリンクを壊すアクションハードリンクが壊れます。

答え2

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

このコマンドは、/other既存のマウントまたはディレクトリと同じ内容を作成します/original

mount --bind /original /other

2 つのパスが同じマウントへのポインターになったため、どちらか一方/originalまたは両方に加えた変更は、もう一方にも直ちに反映されます。/other

関連情報