よこた です。

<m3smo4hn56.fsf@maedapc.cc.tsukuba.ac.jp>の記事において
maeda@cc.tsukuba.ac.jpさんは書きました。

>> >  % mv -f A B tmp 
>> >  mv: cannot create hard link `tmp/B' to `tmp/A': File exists
>> > 
>> > 怒られちゃうんですけど、そういうモンなんでしょうか?
>> > fileutils の以前のバージョンは怒らずにできていたと思うんだけど ...。
>> 
>> 「すでに目的のディレクトリにmoveしたファイルと(inodeが)同じファイルを
>> moveするときは,単にhard linkを作る」という最適化(?)をしてますね.
 <snip>
>> レポートしてあげると良いんじゃないかな.

今日 bug-fileutils@ にレポート出してみました。けど、
出したあとに www.gnu.org を見て知ったんですけど、fileutils は 
coreutils に含まれるようになったんですね。

で coreutils-5.0 の mv を使ってみたところ、問題なくできました。

strace で見ると、

  rename("A", "tmp/A")                    = 0
  link("tmp/A", "tmp/B")                  = -1 EEXIST (File exists)
  unlink("tmp/B")                         = 0
  link("tmp/A", "tmp/B")                  = 0
  unlink("B")                             = 0

だそうで。

## あぁ、レポート送る前にもっと調べればよかった ...