🐧 Linux 総合学習プラットフォーム

「-」で始まるファイル名がオプション扱いされて消せない

症状(よく出るエラー)

誤操作で -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 で消す。

▶ 学習アプリでしっかり学ぶ