「-」で始まるファイル名がオプション扱いされて消せない
症状(よく出るエラー)
誤操作で -rf や --output という名前のファイルができてしまい、rm -rf を実行しても rm: invalid option -- 'f' や「そんなオプションはない」系のエラーが出て消せない。rm "-rf" と引用符で囲んでも同じエラーになる。
原因
コマンドは引数が - で始まるかどうかだけでオプションと判定しており、それがファイル名のつもりかどうかは知りようがない。引用符はシェルの解釈(スペース分割やグロブ)を止めるだけで、コマンドに渡る文字列は同じ -rf のままなので効果がない。こうしたファイルは、リダイレクトの打ち間違い(例: コマンド -o のつもりが > -o)などで意外と簡単に生まれる。
直し方
rm -- -rf のように -- (これ以降は全てオプションでなく引数、という区切り)を挟むのが正攻法。もう一つは rm ./-rf のように ./ を頭に付けて - 始まりでなくす方法で、こちらはどんなコマンドでも使える。ファイル名が特定できないほど化けている場合は ls -i で inode 番号を調べ、find . -maxdepth 1 -inum 番号 -delete で消す。