ハイフンで始まるディレクトリ(ファイル含む)の削除方法
コマンド操作をしていた時に、 ハイフンで始まるディレクトリが作成されてしまって、 削除に困ったので、削除方法を残しておきます。
時系列に書いてみます。
< 複数階層のディレクトリを作ろ。
$ mkdir conf.d/hosts -p
mkdir: conf.d: No such file or directory
< なんかエラーがでた。 mkdir -p conf.d/hosts と書かないといけなかった。
$ mkdir -p conf.d/hosts
< 作成できたはず。 見てみよう。
$ ls -l
total 0
drwxr-xr-x 2 nonichi staff 64 3 30 11:12 -p
drwxr-xr-x 3 nonichi staff 96 3 30 11:12 conf.d
< あれ? -p ってディレクトリができてる・・・
最初のmkdirコマンドでできちゃったんだな。。 削除しておこう。
$ rm -rf "-p"
rm: illegal option -- p
usage: rm [-f | -i] [-dPRrvW] file ...
unlink file
< 削除できない・・・ manコマンドで、削除する方法をしらべよう。。。
$ man rm
NOTE
The rm command uses getopt(3) to parse its arguments, which allows it to accept the `--' option which will cause it to stop processing flag options at that
point. This will allow the removal of file names that begin with a dash (`-'). For example:
rm -- -filename
The same behavior can be obtained by using an absolute or relative path reference. For example:
rm /home/user/-filename
rm ./-filename
< ここかな。直訳すると・・・
rmコマンドは、引数をパースするために、getopt(3) をつかう 「--」オプションは許可する、このポイントで実行フラグオプションを止めることを ダッシュで始まるファイル名を削除することを許可する 例: rm -- -filename 同じ振る舞いを絶対パスや相対パスを使っても得られる 例: rm /home/user/-filename, rm ./-filename
うん、これっぽい。「--」をつけてやってみよう。
$ rm -r -- -p
< 削除できた! よかった。よかった。
以上です。