![ハードリンクを通常のファイルに変換するには? [コピー]](https://linux33.com/image/95298/%E3%83%8F%E3%83%BC%E3%83%89%E3%83%AA%E3%83%B3%E3%82%AF%E3%82%92%E9%80%9A%E5%B8%B8%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
各ファイルがハードリンクであることを知っています。意味は次のとおりです。 1つの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 ';;' {} \;
これら2つのコマンドは、現在の作業ディレクトリのサブディレクトリで一致するinodeを持つファイルのみを検索します。ファイルシステム内のすべてのファイルを検索する必要がある場合は、ルートディレクトリでこのコマンドを実行する必要があります。
最初の部分は、find -samefile filename
同じinodeを共有するすべてのファイルを探します。次に、sed -i ';;'
同じ名前のファイルにファイルをコピーします(';;'
代わりにsedスクリプトを使用しています';'
。そうしないと、引数はコマンドの終わりとしてfind
解釈されます)。;
-exec