mvの移動先指定を誤って cannot move ... to a subdirectory of itself が出る
症状(よく出るエラー)
mv project project/backup のような指定で mv: cannot move 'project' to a subdirectory of itself, 'project/backup' というエラーが出る。似た打ち間違いでは、複数ファイルを移すつもりが最後の引数が既存ディレクトリでなく、ファイル同士のリネーム上書きになることもある。
原因
ディレクトリを自分自身の中へ移動すると親子関係が循環してしまうため、mv はこれを検出して拒否する。エラーで止まる分には無害だが、本質的な原因は「mv は最後の引数が既存ディレクトリならその中へ移動、そうでなければリネーム」という二役の仕様にある。移動先のパスを打ち間違えると、エラーではなく予期しないリネームや上書きとして成立してしまうのが怖いところ。
直し方
移動先が意図したディレクトリとして存在するかを ls -ld 移動先 で先に確認し、ディレクトリの中へ入れる意図なら mv project /backup/ のように末尾に / を付けて「ディレクトリのはず」という意図を明示する。上書きが怖い操作では mv -i(確認あり)や mv -n(上書きしない)を使う。