私のドットファイルをバージョン管理下に置き、それを配布するスクリプトはハードリンクを生成します。また、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
)。