ハードリンクを所定の位置から切断しますか?

ハードリンクを所定の位置から切断しますか?

私のドットファイルをバージョン管理下に置き、それを配布するスクリプトはハードリンクを生成します。また、etckeeperビルドを/etcバージョン管理する習慣があります。最近、私は次の警告を受けました。

warning: hard-linked files could cause problems with bzr

単純コピー(cp filename.ext filename.ext)は機能しません。

cp: `filename.ext' and `filename.ext' are the same file

ファイル名の変更/移動(ボリューム間を除く)もハードリンクを破損しません。

だから私の質問は:ファイルへの別のハードリンクがどこにあるか実際に知らなくてもファイルへのハードリンクを壊す方法はありますか?

ベストアンサー1

cp -p filename filename.tmp
mv -f filename.tmp filename

スクリプト可能にする:

dir=$(dirname -- "$filename")
tmp=$(TMPDIR=$dir mktemp)
cp -p -- "$filename" "$tmp"
mv -f -- "$tmp" "$filename"

最初にコピーを作成してからその場所に移動すると、ファイルがハードリンクから別のコピーに自動的に変更されるという利点があります(部分的または欠落していない時点filename)。

おすすめ記事