ハードリンクを通常のファイルに変換するにはどうすればよいですか?

ハードリンクを通常のファイルに変換するにはどうすればよいですか?

すべてのファイルがハード リンクであることはわかっています。正確には、inode に複数のファイルがポイントされている場合、すべてのファイルが同じ内容の別の inode を指すように inode をコピーするにはどうすればよいでしょうか。

例えば:

echo "Example" > one
ln one two

inode を共有せずに、ファイルをtwoと同じ内容にするにはどうすればよいでしょうか? 必要に応じて、ファイルを「複製」したいと思います。one

答え1

これは次のコマンドで実現できます

find -samefile filename -exec sed -i ';;' {} \;

またはファイルのinode番号がわかったら

find -inum inode -exec sed -i ';;' {} \;

これらのコマンドは両方とも、現在の作業ディレクトリのサブディレクトリ内の一致する inode を持つファイルのみを検索することに注意してください。ファイル システム上のすべてのファイルを検索する必要がある場合は、ルート ディレクトリからこのコマンドを実行する必要があります。

最初の部分 はfind -samefile filename、同じ inode を共有するすべてのファイルを検索します。次に を実行してsed -i ';;'、ファイルを同じ名前のファイルにコピーします (';;'の代わりにsed スクリプトを使用することに注意してください';'。そうしないと、findは引数をコマンド;の終了として解釈します-exec)。

関連情報