rcmdnk's blog

ブラックナンバー ハイフン 50mmシリーズ

何かの拍子でハイフンから始まるファイルやディレクトリを作ってしまった時に コマンドラインからそれらを消す方法について。

Sponsored Links

”–“かパスを加える

-は大概の場合コマンドのオプション開始記号になっているので、 そのままrm等を行うと

$ ls
-file
$ rm -file
rm: illegal option -- l
usage: rm [-f | -i] [-dPRrvW] file ...
unlink file

こんな感じで怒られます。上の場合では-fileと言う名前のうち、 -f-irmのオプションとして存在してるのでそれらがオプションとして 理解された後、lの部分を解釈しようとしてそんなオプション(-l)は無い、 とエラーを出しています。

これに対処する1つの方法は--を使う事。

$ rm -- -file
$ ls

消えました。--それ以降に出てくる全ての引数をオプションとは見なさない、 と言う役割を果たすオプションです。

なのでこの場合は-fileを書いた時点でそれ以降がそのまま文字列として rmに渡されます。

大概のコマンド(touchmvcpcd等)ではこれが有効です(GNU/BSD、Bash/Zsh問わず)。

man bashを見ると

--        A  --  signals the end of options and disables further option
          processing.  Any arguments after the -- are treated as  file-
          names and arguments.  An argument of - is equivalent to --.

こんな感じで書かれています。

また、要するに先頭が-である名前がダメなので、 ファイル指定するときにパスを加えてあげるだけでも扱える様になります。

現在のディレクトリなら./を加えるだけ。

$ touch -- -file
$ ls
-file
$ rm ./-file
$ ls
$

ディレクトリの場合でも同様。

$ mkdir -- -dir
$ ls
-dir
$ cd ./-dir
$ pwd
~/-dir
$ cd ../ && rm -rf -- -dir
$ ls
$

また、*を使った展開にも有効です。

$ ls
-dir -file
$ rm -rf -- *
$ ls
$

または

$ ls
-dir -file
$ rm -rf ./*
$ ls
$
Sponsored Links
Sponsored Links

« Firefoxのスタートページがマルウェアに汚染されたみたいになってびっくりした 自転車が盗まれたら安物でも取り敢えず盗難届を出しておくべき »