ののいち の 1.2..3...

IT関連の技術情報をメインに、学んだことや感じたことを書いています。

ハイフンで始まるディレクトリ(ファイル含む)の削除方法

コマンド操作をしていた時に、 ハイフンで始まるディレクトリが作成されてしまって、 削除に困ったので、削除方法を残しておきます。

時系列に書いてみます。

< 複数階層のディレクトリを作ろ。

$ 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

< 削除できた!           よかった。よかった。

以上です。