行き先が無かったら、どうなると思う?

箱に入れたつもりの書類が、箱の外で重なっている
箱に入れたつもりの書類が、箱の外で重なっている

mv *.txt backup と打てば、.txt のファイルがまとめて backup の中へ入る。backup というディレクトリがあれば、の話だ。 では、もし backup というディレクトリが無かったらどうなるか。

mv の規則は単純で、最後に書いたものが行き先。だから対象が2つ以上あるときは「行き先がディレクトリではない」と言ってエラーで止まってくれる。ところが、パターンに合うファイルが1つだけだったときは話が変わる。mv report.txt backup は「report.txt を backup という名前に変える」という、まったく正しい命令として通ってしまう。 毎晩ログを片付けているつもりのその一行が、実は毎晩ファイルを1つ backup という名前に変え、前の晩のものを上書きし続けている。エラーは出ない。

守り方は簡単で、行き先の末尾に / を付ける。mv *.txt backup/ なら、backup がディレクトリでないときはエラーで止まる。mkdir -p backup を先に打っておく、でもいい。

まとめて動かす一行は強い。強い一行ほど、狙いが外れたときにどこへ飛ぶのかを知っておきたい。